2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

【IT】Rubyコミッター・Yuguiに学ぶ、コードに書くべき「適切なコメント」と「適切な場所」

1 :ノチラ ★:2018/06/01(金) 20:45:56.86 ID:CAP_USER.net
https://cdn-ak.f.st-hatena.com/images/fotolife/b/blog-media/20180508/20180508182455.jpg
プログラミングにおいて、どんな初心者でも書けるけれど、適切に書くのは上級者でないと難しいもの。それがコメント(=ソースコードに書かれている注釈やメモ)です。

不適切なコメントをつけても、プログラムの動作には影響しません。しかし、書き方の巧拙によって、コードの可読性や理解のしやすさには雲泥の差が出ます。良質なコメントが良質なコードをつくるのです。

今回はRubyコミッターでありgrpc-gatewayの開発者でもあるSupership株式会社の園田裕貴(Yugui)さんに、優れたエンジニアがどんな観点を持ち、どんなコメントを書いているのかを聞きました。

――園田さんはどんな箇所にコメントを書いているか教えてください。

園田:まず、外部との接点にはコメントを書くべきだと考えています。要するに、パッケージやモジュールなどの機能で、外から利用されることを想定しているもの。それが最初の候補です。

なぜかというと、プログラムがうまくモジュール化されているならば利用者はコードの内部を知る必要はないですが、呼び出すに当たり「どんな振る舞いをするのか」「何に気を付けるべきか」といった情報は知っておく必要があるからです。

例えば、引数が文字列型だとして「どんな形式の文字列であるべきなのか」までを言語仕様で制限できるものはそんなにないですよね。少なくとも、メインストリームで使われているプログラミング言語としてはすぐには思い当たりません。

パッケージやモジュールを外部から利用する人には、どんな形式の文字列を期待するのか情報提供しなければなりません。つまり、他者がそのコードを利用することを前提として、コードだけでは伝え切れない情報を付属的に伝える。これがコメントを書くべき箇所の基本的な考え方です。

――では、外部とのインターフェースには具体的に何を書くべきでしょうか?

園田:一般論として最初に検討するべき候補はあります。「(1)事前条件」「(2)事後条件」「(3)不変条件」「(4)入力の意味」「(5)出力の意味」「(6)副作用」「(7)計算量」です。要するに、利用する側が知っておくべきだけれど、コードの中身を見なければ容易には分からないものです。

ただ、究極的な答えはどうしてもケースバイケースになってしまいます。例えば、モジュール化のためにパッケージを分けてはいるけれども、そのパッケージを自分しか使わない確信があれば、コメントは書かなくていい。

だから、ライセンス(利用許諾)やチーム体制など「プログラムがどんな人にどう使われるのか」も、コメントを書く書かないの判断材料になってくると思います。

【コメントの技法2】どんな読者が読むのかを考える
――ソースコードの処理内部でコメントを記載する箇所の候補を挙げるとすれば?

園田:候補を検討するに当たり考慮すべきは「どんな読者がコメントを読むのか」です。読者がどんなスキルを持っていて、何を知っているのか。それを踏まえることが重要になります。

ここで言う想定読者とは、他のチームメンバーあるいは将来の自分です。その人たちに向けて「コードを日常的に読む人が知らなければいけない情報」を記載しておく必要があります。

――というと、具体的には?

園田:複雑なアルゴリズムにはコメントを書くべきでしょうね。ただ、どれだけ詳細に書くべきかはやはりケースバイケース。チームメンバーまたは自分自身の平均的なスキルレベルに依存すると思います。

例えば、私は以前あるプロジェクトでワーシャルフロイド法の実装が必要になり、コードを書いたことがあります。そのコメントに「ワーシャルフロイド法」と書き、Wikipediaへのリンクを貼りました。

なぜなら、私はそれほど競技プログラミングには強くないからです。半年後くらいに自分がそのコードを見たとき、何のアルゴリズムか一目では判別できない可能性があるだろうと考えました。

でも、競技プログラミングに強いメンバーがたくさんいる会社もありますよね。そういったエンジニアならばコードを見ればワーシャルフロイド法だと分かります。だから書く必要はないでしょう。

https://employment.en-japan.com/engineerhub/entry/2018/05/22/110000

2 :名刺は切らしておりまして:2018/06/01(金) 21:38:06.84 ID:SJYEv0u2.net
コメント読まなきゃコードを理解できないやつは開発なんて向いてないんだよ
邪魔だから消えてくれ

3 :名刺は切らしておりまして:2018/06/01(金) 21:39:44.84 ID:Rb17oGwS.net
コメント書いて、どうぞ

4 :名刺は切らしておりまして:2018/06/01(金) 22:15:15.66 ID:1XFud9C2.net
>>2
ソース読み込む労力があるなら記事の前半だけでも読むことをしような。

5 :名刺は切らしておりまして:2018/06/01(金) 22:29:18.84 ID:x68CM0Vy.net
検索をします

6 :名刺は切らしておりまして:2018/06/01(金) 22:34:13.25 ID:qprJtppj.net
理解不能なコメントを書かれるより、何もない方がイイこともある

7 :名刺は切らしておりまして:2018/06/01(金) 23:34:33.11 ID:38mQCbQL.net
// 暫定

8 :名刺は切らしておりまして:2018/06/02(土) 02:48:15.87 ID:eABtjXuv.net
Executable document
が最高
コメント書く奴は二流の下

9 :名刺は切らしておりまして:2018/06/02(土) 07:20:56.95 ID:BfS1AOBO.net
//これを消すと何故か動かない

10 :名刺は切らしておりまして:2018/06/02(土) 07:41:40.35 ID:PTaW2IDB.net
Yuguiタソきたー
萌えるわ〜
最初>>1が男の娘だなんて知った時はビックリ

11 :名刺は切らしておりまして:2018/06/02(土) 08:26:55.82 ID:e2c1wT+T.net
>>2
どういう理由で、そのロジックを使ってるのか?
的なコメントはあった方が良いケースがあるぞ

一般的には、こうした方がええやん、これ、おかしくね?
みたいなのに、コメントがあると納得できる

12 :名刺は切らしておりまして:2018/06/02(土) 08:34:32.72 ID:DhdDP7yH.net
書くべきコードはRubyじゃない

13 :名刺は切らしておりまして:2018/06/02(土) 08:48:21.64 ID:TKgeE0fR.net
>>12
今どきRubyなんて使ってる奴いるのかね

世界の潮流に淘汰された日本のオッサンたちが集まってる感じがする

しょぼw

14 :名刺は切らしておりまして:2018/06/02(土) 11:08:04.48 ID:/MKa1xLg.net
>>9
おまじないwww

15 :名刺は切らしておりまして:2018/06/02(土) 12:58:58.02 ID:c1hZ7FX0.net
>>9
昔のバグったコンパイラは、無駄な処理を一個かまさないと
なぜか正常なバイナリを作らなかったりしたんだよな・・・

16 :名刺は切らしておりまして:2018/06/02(土) 19:20:54.26 ID:OZ/JrXWG.net
>>13
webアプリに関しては今もRubyが他より秀でてる。

physonにもrailsレベルのフレームワークがあれば良いのだが。
Rubyも処理速度の向上に努めてるし、physonと同等のライブラリーを準備出来れば、Rubyの方が上でしょ。

17 :名刺は切らしておりまして:2018/06/02(土) 19:23:23.26 ID:b64dDNly.net
コメントはオープンソースにだけ書けばいい。
クローズドなソースには基本的に必要ない。

但し、例外的に何故そのコードにしたのか
備考が必要だと思うときだけは書け。

18 :名刺は切らしておりまして:2018/06/02(土) 19:24:32.23 ID:b64dDNly.net
>>16
それ海外で言ったら笑われるやつだぞ

19 :名刺は切らしておりまして:2018/06/02(土) 19:37:53.76 ID:4wzxSxBb.net
>>16
じゃあなんで普及しないんだよ

20 :名刺は切らしておりまして:2018/06/02(土) 19:40:07.66 ID:gSvlGgSo.net
>>1
至極真っ当なことしか言ってないと思うがな。
この程度のことも躾られていないのが多いのも事実だけど。

21 :名刺は切らしておりまして:2018/06/03(日) 17:52:20.66 ID:052mca8r.net
>>16
Railsが生産性落としてる気がするなー

22 :名刺は切らしておりまして:2018/06/03(日) 18:13:39.25 ID:IMcS5azC.net
言語が流行るか否かは結局は運だよ

23 :名刺は切らしておりまして:2018/06/03(日) 22:25:15.13 ID:Fie9wtDK.net
とっくにJavaScriptの時代となっているのに

24 :名刺は切らしておりまして:2018/06/04(月) 16:02:50.56 ID:HEBF3bhU.net
>>16
今時売りがRailsかよ
何年思考止まってるんだ

25 :名刺は切らしておりまして:2018/06/04(月) 16:03:08.51 ID:HEBF3bhU.net
>>22
運ではない

総レス数 25
9 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★