IT ニュース&コラム 2017/ 6/ 5 通巻739号 技術版 ソフトウェアデザイン館 Sage Plaisir 21  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ■■ 使っていないソースのセクションをカットする DoTextShrink ■■ vbslib の DoTextShrink コマンドは、テキスト ファイル(C言語のソースなど)から、 使っていないセクション(関数など)をカットします。 なお、セクションは、 NauralDocs 形式のコメントで区切ります。 vbslib は、以下からダウンロードできます。 Windows 用です。 http://vbslib.osdn.jp/ http://www.sage-p.com/vbslib/vbslib.htm https://github.com/TsNeko/vbslib 使っていない関数をカットする例を示します。 下記のような C言語のソース ファイル があるとします。 ---------------------------------------------------------------- int main() { FuncA(); } void FuncA() { } void FuncB() { } ---------------------------------------------------------------- プログラム(コンソール型のプログラム)は、main 関数から始まるため、 main 関数は必ず使われます。 次に、上記の FuncA 関数は、main 関数から 呼び出されているので、これも使われています。 しかし、FuncB 関数は、 どこからも呼ばれていないので、カットします。 カットしたら、下記の ようなファイルになります。 ---------------------------------------------------------------- int main() { FuncA(); } void FuncA() { } ---------------------------------------------------------------- ただし、DoTextShrink コマンドは、C言語の構文解析をして、関数をカット してるわけではありません。 通常、関数(や構造体など)のすぐ上には 関数を説明するコメントがあり、カットするなら、そのコメントもカット しなければならないからです。 C言語では、コメントが doxygen 形式になっていることが多いのですが、 残念ながら、doxygen 形式では、関数名がコメントに含まれていないため、 カットする関数のコメントであるかどうかを判断する情報がなく、カット できません。 そこで、DoTextShrink コマンドでは、NaturalDocs 形式を 採用しました。 コメントがどの関数のコメントであるかの情報は勿論 ありますが、NaturalDocs は読みやすいという利点もあります。 また、 ": "+ キーワードで検索することで、定義だけに絞り込んで、検索できる ようになりますし、Snap Note の「プログラミング補助機能」で、クリック するだけで、関数定義(のコメント)にジャンプすることができるように なります。 逆に言えば、コメントを NaturalDocs 形式で書かなければなりません。 その手間がありますが、メリットのほうが大きいでしょう。 また、リリース先によっては doxygen 形式が要求されることがあるかも しれません。 そのときは、vbslib の ConvertDocumetCommentFormat コマンドで、NaturalDocs 形式を doxygen 形式に変換します。 変換できる ため、マスターは、NaturalDocs 形式だけにしておくとよいでしょう。 (ただし、変換できない形式もあるので、使用する NaturalDocs の形式を 限定するなど工夫してください。) NaturalDocs 形式のコメントがあるソース ファイルをカットした場合、 以下のように、FuncB のコメントもカットされます。 ---------------------------------------------------------------- /* * Function: main */ int main() { FuncA(); } /* * Function: FuncA */ void FuncA() { } ---------------------------------------------------------------- NaturalDocs 形式は、主に、コメントの中の Keyword: (キーワードとコロン) を手掛かりに解析します。 よって、* を行全体に並べることもできます。 ---------------------------------------------------------------- /*********************************************************************** * Function: SampleFunction ************************************************************************/ ---------------------------------------------------------------- キーワードは、Function だけでなく、Structure などいろいろあります。 詳しくは、NaturalDocs のホームページを参照してください。 キーワードとコロンの次に、シンボル(関数名や構造体名など)を記述します。 このシンボルを DoTextShrink コマンドがリードして、使われていないシンボルなら、 そのコメントから次のコメントの先頭までをカットします。 コメントから次の コメントの先頭までを、セクションと呼びます。 使われているかいないかは、セクションの中にシンボルが単語単位・大文字小文字を 区別で検索して、見つかったかどうかで判断します。 C言語の構文解析は行いません。 使われているかどうかの関係は、コンソール アプリケーションでは、main 関数を ルートとしたツリー構造になっていますが、ライブラリでは main 関数とは限り ません。 DoTextShrink コマンドでは、それを考慮して、特定のファイルをルート として指定します。 指定したソース ファイルに定義されているすべてのシンボル がルート(使われているかどうかの参照元)として扱われます。 このように、使っていない関数をカットすることで、ソース ファイルを 減らしたり、実行ファイルのサイズを減らしたりできます。 ただし、 実行ファイルのサイズは、リンカーによっては自動的にカットすることが できるため、その目的のためだけであれば、DoTextShrink コマンドを使う 必要はないかもしれません。 ところで、プログラム ソースの管理の方針によっては、使っていないソース ファイルを削除することが要求されます。 開発しているうちに使われなくなった 関数ができることがたまにありますが、そういった関数は余分なので削除しよう ということです。 しかし、使われていない関数を削除するという一見当たり前と思える方針には、 副作用があります。 ライブラリ(バイナリだけでなくソースのライブラリも) では、アプリケーションによって使われれるのは一部の関数だけであることが 普通で、だからといって他の関数が不要であるわけではありません。 他のアプリケーションでは使われる可能性があります。 よって(ライブラリ からも完全に)削除するわけにはいきいません。 削除するという方針だから 素直に削除しようとしてはいけません。 こういった乱暴な方針が、ライブラリ という「資産」を増やせなくする要因なのです。 そこで、ライブラリとしての役割をしたソース ファイルをまるごとアプリ ケーションに追加して開発していき、最終テストをするとき、リリース物を 作るときに、DoTextShrink コマンドで不要な関数を自動的にカットします。 ■■ 注目ニュース 一覧 ■■ ◇ グーグル、Chrome に不適切広告のブロック機能を2018年に導入。 https://japan.cnet.com/article/35102147/ https://anagrams.jp/blog/better-ads-standards-starting-in-early-2018/ … 広告の大きさでブロックするのはいいが、内容でブロックされる基準は主観的。 ◇ Nintendo Switch向けオンラインサービスは2018年開始に変更。料金プランなどが公開。 https://japan.cnet.com/article/35102171/ … スプラトゥーンやマリオカートなどのオンライン対戦は有料へ。1か月 200円〜300円。 ◇ Intel史上もっともパワフルなデスクトップCPU Core i9-7900 シリーズ。 http://pc.watch.impress.co.jp/docs/column/kaigai/1062623.html … サーバー用の Xeon CPU と同じか。 ◇ 米政府、ビザ審査を厳格化へ。SNSのハンドルネームも対象に。 https://japan.cnet.com/article/35102165/ … 法による圧力だが技術的には穴だらけ。 軽犯罪は防げそう。 ◇ Googleスプレッドシート、AIでグラフ作成が簡単に。自然言語を理解。 https://japan.cnet.com/article/35102157/ … MS-Office のイルカにならないか。 Google の AI で証明されたのは囲碁しかない。 ◇ SketchとFigma、UIデザインの共同作業にはどっちが向いている? https://www.webprofessional.jp/figma-vs-sketch-who-wins-the-war-on-multiplayer-design/ … 複数の Web デザイナーが同時に編集できる Web デザイン ツール。 ◇ Webマーケターのための統計学入門(仮説検定・回帰分析編)がスタート。 https://www.webprofessional.jp/statistics-hypothesis-testing/ … Googleアナリティクスなどでアクセス分析した結果をどう判断したらいいのか。 ■■ ソフトウェアデザイン館 Sage Plaisir 21 ■■ ホームページ >>> http://www.sage-p.com/ メルマガ >>> http://www.mag2.com/m/0000083983.html ブログ >>> http://blog.livedoor.jp/sage_p/ ツイッター >>> http://twitter.com/Ts_Neko ダウンロード >>> http://www.sage-p.com/freesoft.htm サポート掲示板 >>> http://www.sage-p.com/kg_ban09/z6037C8.cgi 東日本大震災 >>> http://www.sage-p.com/saigai.html メール >>> ts-neko◇sage-p.com ←◇を@に変えてください 緊急メールは件名に「うどんメール」を付けてください。 このメルマガの登録・解除 - http://www.mag2.com/m/0000083983.htm