カテゴリ別 2003年 | 2004年 | 2005年 | 2006年 | 2007年 | 2008年
知り合いサイト: よんだもの / 暴想 / Linuxでやる夫 / 新宿Vipper / 僕だけが幸せになればいいのに。
先日公開されたオープンソース版 Fastladder を遅ればせながらダウンロードしてみました。オープンソース版は Rails 製。せっかくなのでコードを読んでみることにします。
Fastladder Open Source / Free Downloadのページから、Unix / Linux 版をダウンロードします。
$ wget http://fastladder.org/downloads/fastladder-0.0.2-src.tar.gz $ tar fxz fastladder-0.0.2-src.tar.gz $ cd fastladder
INSTALL.txt に書いてある通りです。
どんなプラグインを使っているかを調べるため、vendor/plugins を見ます。
$ ls vendor/plugins restful_authentication
restful_authentication は Rails 2.0 でデファクトスタンダードな認証プラグインです。使っているのはこれのみのようですね。
とりあえずアプリの規模を知るために LoC を調べます。rake のタスクにコードのメトリクスを得る stats というのがあります。
$ rake stats (in /home/date/tmp/fastladder) +----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+-------+-------+---------+---------+-----+-------+ | Controllers | 1015 | 886 | 22 | 73 | 3 | 10 | | Helpers | 90 | 85 | 0 | 9 | 0 | 7 | | Models | 282 | 232 | 8 | 29 | 3 | 6 | | Libraries | 602 | 484 | 2 | 37 | 18 | 11 | | Integration tests | 0 | 0 | 0 | 0 | 0 | 0 | | Functional tests | 366 | 274 | 28 | 57 | 2 | 2 | | Unit tests | 171 | 133 | 8 | 21 | 2 | 4 | +----------------------+-------+-------+---------+---------+-----+-------+ | Total | 2526 | 2094 | 68 | 226 | 3 | 7 | +----------------------+-------+-------+---------+---------+-----+-------+ Code LOC: 1687 Test LOC: 407 Code to Test Ratio: 1:0.2
Code LOC: 1687 なので、サーバ側は結構コンパクトなコードだと言えます。余り時間を書けずに読めそうですね。
他の値も少し見てみます。全体の規模からするとコントローラのクラス数が多いですね。画面数あるいは機能数が多いのかもしれません。コントローラとモデルの Methods/Class が 3 と少なめですから、(コード的に)軽量な画面や機能が多いか細かく分割していると考えられます。統合テストが 0 ですが、Code to Test Ratio は 1:0.2 なので TDD でない Rails アプリでは普通くらいでしょうか。まあ、この辺のメトリクスの値は多いから良いとか悪いとかではないので、傾向が多少分かるくらいの話ですが。
参考までに他の Rails アプリの stats の結果を挙げておきます。
(in /home/date/tmp/redmine-0.6.3) +----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+-------+-------+---------+---------+-----+-------+ | Controllers | 3888 | 2814 | 36 | 242 | 6 | 9 | | Helpers | 1850 | 1026 | 2 | 84 | 42 | 10 | | Models | 3748 | 2293 | 54 | 276 | 5 | 6 | | Libraries | 7111 | 4838 | 39 | 313 | 8 | 13 | | APIs | 25 | 8 | 1 | 0 | 0 | 0 | | Integration tests | 268 | 166 | 4 | 10 | 2 | 14 | | Functional tests | 1686 | 1140 | 40 | 163 | 4 | 4 | | Unit tests | 1938 | 1125 | 32 | 149 | 4 | 5 | +----------------------+-------+-------+---------+---------+-----+-------+ | Total | 20514 | 13410 | 208 | 1237 | 5 | 8 | +----------------------+-------+-------+---------+---------+-----+-------+ Code LOC: 10979 Test LOC: 2431 Code to Test Ratio: 1:0.2
多機能なだけあって Code LOC は 10000 超えです。ライブラリが約半分を占めていますが、サードパーティー製で大きいのは SVG グラフくらいなのでそれを除いても 10000 前後でしょう。モデルがやたら多いですね。ヘルパーの Methods/Class が 42 なので、これは明らかに詰め込みすぎ。
(in /home/date/tmp/typo-5.0.2) +----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+-------+-------+---------+---------+-----+-------+ | Controllers | 2124 | 1752 | 37 | 220 | 5 | 5 | | Helpers | 765 | 608 | 0 | 104 | 0 | 3 | | Models | 3041 | 2432 | 57 | 415 | 7 | 3 | | Libraries | 1446 | 1047 | 33 | 161 | 4 | 4 | | APIs | 437 | 355 | 17 | 23 | 1 | 13 | | Components | 0 | 0 | 0 | 0 | 0 | 0 | | Model specs | 1022 | 805 | 2 | 19 | 9 | 40 | | View specs | 118 | 94 | 0 | 9 | 0 | 8 | | Controller specs | 870 | 675 | 1 | 19 | 19 | 33 | | Helper specs | 50 | 37 | 0 | 0 | 0 | 0 | +----------------------+-------+-------+---------+---------+-----+-------+ | Total | 9873 | 7805 | 147 | 970 | 6 | 6 | +----------------------+-------+-------+---------+---------+-----+-------+ Code LOC: 6194 Test LOC: 1611 Code to Test Ratio: 1:0.3
こちらもモデルクラスが多いですね。LOC/Method が総じて低いので、すっきりしたコードなのでしょう。
(in /home/date/tmp/pref-shimane-cms-1.0) +----------------------+-------+-------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+-------+-------+---------+---------+-----+-------+ | Helpers | 317 | 288 | 0 | 23 | 0 | 10 | | Controllers | 2860 | 2576 | 8 | 199 | 24 | 10 | | APIs | 4 | 2 | 1 | 0 | 0 | 0 | | Components | 0 | 0 | 0 | 0 | 0 | 0 | | Functional tests | 2660 | 2358 | 12 | 165 | 13 | 12 | | Models | 1817 | 1536 | 22 | 149 | 6 | 8 | | Unit tests | 1510 | 1270 | 24 | 131 | 5 | 7 | | Libraries | 8275 | 6270 | 128 | 414 | 3 | 13 | +----------------------+-------+-------+---------+---------+-----+-------+ | Total | 17443 | 14300 | 195 | 1081 | 5 | 11 | +----------------------+-------+-------+---------+---------+-----+-------+ Code LOC: 10672 Test LOC: 3628 Code to Test Ratio: 1:0.3
LOC が 2576 と大きいわりに、コントローラ数が少なく、Methods/Class が 24 と大きいです。あまり画面遷移をさせずに色々できるようにしているのかもしれません。LOC/Method も 8〜10 と大き目ですね。リファクタリングの余地がありそうです。
わき道に逸れたので今回はここまで。
最近のコメント:
RSS
![]()
This work is licensed under a
Creative Commons License
(note: text only. w/o web design, citations, (re)distributed softwares).