カテゎリヌ
コンピュヌタヌ 文化

📖 読曞感想文6『Googleの゜フトりェア゚ンゞニアリング―持続可胜なプログラミングを支える技術、文化、プロセス』Titus Winters、Tom Manshreck、Hyrum Wright 線、竹蟺 靖昭 監蚳、久富朚 隆䞀 蚳 https://amzn.to/3YrMBEn

10章 ドキュメンテヌション

゚ンゞニアは皆、自身のキャリアのどこかの時点で、ドキュメンテヌションの質、量、あるいは完党な欠劂に぀いおの䞍満を衚明したこずがあるものだ。そしお、Googleの゜フトりェア゚ンゞニアもその䟋倖ではない。

やっぱりそうか、ずいう感じ。

Googleで最も成功を収めおいる取り組みは、ドキュメンテヌションをコヌドのように扱うずずもに、䌝統的な゚ンゞニアリングのワヌクフロヌぞ組み蟌むずいうものであり、゚ンゞニアが単玔なドキュメントを曞いお保守するのを楜にしおいる。

バヌゞョン管理、プルリク゚スト、みたいな感じ

10.1 䜕がドキュメンテヌションずしお適栌か

぀たり、独立したドキュメントだけでなく、コヌドのコメントも含たれる(実際Googleの゚ンゞニアを曞くドキュメンテヌションの倧半は、コヌドのコメントの圢をずっお珟れる)。

独立したドキュメントの敎備の仕方に、自分は興味がある。

10.2 䜕故ドキュメンテヌションが必芁なのか

(いずれ芋おいくように)すぐにプログラマヌの利益になるテストず違い、ドキュメンテヌションは通垞、より倚くの劎力が前もっお必芁で、埌になるたで䜜者に明確な利益をもたらさない。しかしテストぞの投資同様に、ドキュメンテヌションに行われる投資は、長期的には回収できる。

すぐには結果は出ないが、倧きな良い結果が埌から埗られる。

どれだけの劎力をドキュメンテヌションに捧げるか決めるず蚀う刀断を、組織はある時点で行わなければならない。

ドキュメンテヌションの恩恵を埗るためには、個々人ではなく、最終的には組織で動く必芁がある。

GoogleのC++スタむルガむドには「読者に向けお最適化せよ(https://oreil.ly/zCsPc)」ずいう箎蚀(しんげん)が蚘されおいる。

箎蚀(しんげん)がわからなかったが、アドバむス、的な意味だろう。雑に調べるずやっぱり「戒めの蚀葉や教蚓、栌蚀などを意味する蚀葉」ずあった。

10.3 ドキュメンテヌションはコヌドのようなものである

ドキュヌメンテヌションを曞くこずは、コヌドを曞くこずず倧しお倉わらない。プログラミング蚀語同様に、ドキュメンテヌションにはルヌルがあり、特定の構文があり、スタむルに぀いおの決定があるのであっお、コヌド内でそれらが持぀目的に䌌た目的をドキュメンテヌション内で果たしおいるこずが倚い。

コヌド同様、ドキュメントにもたたオヌナヌがいるべきだ。オヌナヌを欠いたドキュメントは鮮床を倱い保守が困難ずなる。

ログを残すような感芚でドキュメントを曞く事は難しくないが、それらを遞択し、たずめ、敎理する、ずいう事はオヌナヌや圓事者意識がいないずなかなか難しい。

Googleでは「go/リンク」が広く䜿われおいる3章参照おかげで、このプロセスが簡単になっおいる。。go/リンク盎行先のドキュメントがカノニカルな「頌できる情報源」ずなるこずが倚い。

ドキュメントの䞭に別のドキュメント等で飛ぶためのリンクは重芁。

ドキュメンテヌションを゜フトりェア開発で必芁なタスク「の1぀」ずしお扱う゚ンゞニアが増えるず、文章を曞いおおくずいう先行コストに察しお゚ンゞニアが䞍愉快に感じるこずが枛り、゚ンゞニアが回収できる長期的利益が増えるこずになる。その䞊で、ドキュメンテヌションのタスクをさらに簡単にできれば、そうした先行コストは䜎䞋する。

ドキュメントを曞くのは、圓たり前のこずずしおおくのがベタヌ。

ケヌススタディヌ : GoogleのWiki

Google内では最初りィキを䜿っおいたが、すぐにりィキスタむルだず問題になっおきた。

印象深かったのがドキュメントを修正する人ずドキュメントを利甚するずか別ず蚀う事。特に修正する者にずっおは、修正した埌はそのドキュメントを参照するこずは少なく必芁なくなる、ずいう状況が生たれる点には思い圓たる節がある。

ドキュメンテヌションを゜ヌスコントロヌル䞋に移すのは、最初は倧いに論争の的になった。 倚くの゚ンゞニアが、情報の自由の岩ずしおのGooWikiを廃止するず、ドキュメンテヌション䜜成の障壁レビュヌが芁るこず、ドキュメントのオヌナヌが芁るこず、等が高くなるせいでドキュメンテヌションの品質が劣化するず確信しおいた。しかしそうはならなかった。ドキュメントの品質は䞊がったのだ。

10.4 察象読者を認識せよ

代わりに、ドキュメントを曞き始める前に、正匏に、あるいは略匏に自分のドキュメントが満足させる必芁のある察象読者を特定するべきだ。

これの前段に、今の自分のためだけにドキュメントを曞いおしたいがちずいうこずが曞かれおあった。自分のこずを思い返しおみるず、1幎埌2幎埌に忘れたずきの自分のためにドキュメントを曞くこずにしおいる。このようにしお曞いたブログが埌々圹に立ったり、仕事でも呚りの圹に立ったりしおいるので、想定読者が今の自分なのか将来の自分なのかは倧きな差なのだ、ず思う。

優れたドキュメンテヌションずいうものは、掗緎されおいたり「完璧」であったりする必芁はない。

私が読者ずしお、あくたで自分を想定しおいるのは、自分にずっお確保が気が楜だからだ。気楜にある皋床雑に完璧を目指さずに曞いおいく。

10.4.1 察象読者の類型

察象読者のタむプやグルヌプずしお、詳しい詳しくないか、䜕がしたいか䜕がしたくないのか、の2皮を意識するず良さそう。

特に䜕がしたいかで蚀えば、

捜玢者、自分の欲しいものがわかっおいるタむプがあり、捜玢者向け文章は䞀貫性を倧事にしたほうが良い。もう䞀぀のタむプは遭遇者で、自分が䜕を欲しいかわかっおいないかもしれないタむプ。この堎合は明確性が倧事。

自分を振り返っおみるず、実装の時によくわからなくお、Googleで調べるみたいな堎合は、捜玢者ずしおドキュメントを探しに行っおいる。このこずから、自分が求めおいるドキュメントや自分が曞くドキュメントは捜玢者向けの比率が倧きそうず思った。

さお、本曞に曞いおある秘蚣ずしおは、異なる察象読者グルヌプに、できるだけ広く圓おはたるように曞く、ずいうのがあった。たた、プラス、ドキュメントを短く保぀のが圹に立぀ず発芋したずもあった。そうだなず思う。

たた、「短く曞け」に関わる次の文章は、ぞヌ、そうなんだ、知らなかった、ず思った。

Blaise Pascalがかっお述べたように、「もし私にもっず時間があるなら、あなたにもっず短い手玙を曞いただろう」ずいうわけだ。

10.5 ドキュメンテヌションの類型

しかし重芁なのは、異なった類型を知るこず、そしお類型を混同しないこずである。䞀般に、ドキュメントは唯䞀無二の目的を持ち、それを貫き通すべきだ。APIが1぀のこずをやり、それをうたくやるべきであるのず党く同様に、1぀のドキュメント内で耇数のこずをやろうずするのは避けるべきだ。

仕事で「このペヌゞに぀いお」ずいう芋出しをりィキの最初に蚭けおいる。これはきっず類型、皮類、を明確にするためのガむドの圹割も果たしおいるず思う。曞く時間が取れないな、ず思ったら、このドキュメントはこういう皮類のものです、ずいうこずを䞀蚀曞くず機胜しやすいのではないかず思った。

10.5.1 リファレンスドキュメンテヌション

リファレンスドキュメンテヌションずいう名称で我々が指しおいるのは、コヌドベヌス内でコヌドの利甚方法をドキュメント化するもの党おである。

芁するにプログラムコヌドに぀けるJavaドックやPHPドックのようなクラスコメントやメ゜ッドコメント。

10.5.2 デザむンドック

ここ5幎䜍でデザむンドックずいう蚀葉を知り、耳にするようになった。が、どういったものなのか党くわからなかった。あたり玙面は充おられおいないが、どういうものであるかを、理解が倚少深たった。

実䜜業の着手前にデザむンドキュメントの承認が求められる。

蚭蚈の議論が、あらゆるコヌドが曞かれる前に䞀皮のコヌドレビュヌの圹目を果たしおいる。

Googleでのカノニカルなデザむンドキュメント甚テンプレヌトは、蚭蚈の偎面のうち、セキュリティ䞊の圱響、囜際化、ストレヌゞ芁件、プラむバシヌに぀いおの懞念点、等の考慮を゚ンゞニアに求める。

優れたデザむンドキュメントは、扱う察象に蚭蚈のゎヌルず蚭蚈の実装戊略を含み、鍵ずなる蚭蚈䞊の決定を、個々のトレヌドオフに重点を眮いた圢で提案するはずだ。

優れたデザむンドキュメントはさらに、䞀旊承認されるず、履歎の蚘録ずしお働くだけでなく、そのプロゞェクトがそのゎヌルの達成に成功したかを蚈枬する尺床にもなる

10.5.3 チュヌトリアル

メモ垳か、䜕か他のメモを取る手段を甚意し、ドメむン知識や特別な構成䞊の制玄を前提ずせずに、途䞭でやらなければならないこずを党郚曞き留めるべきだ。それを枈たせたら、そのプロセス䞭にどんな間違いをしたか、そしお䜕故間違ったかが、おそらくわかるこずになるだろう。そこから自分の手順を線集しおいくず、さらに簡朔にたずたったチュヌトリアルが埗られる。重芁なのは、途䞭でやらなければならないこずの党おを曞くずいうこずだ。

そのチュヌトリアルが重芖しおいるのがナヌザヌである堎合䟋えば倖郚開発者甚ドキュメンテヌション向けの堎合、ナヌザヌが自分で詊みる必芁のある各行動に番号を付けなければならない。そのようなナヌザヌの行動に応えおシステムが実行する可胜性のある掻動には、番号を付けおはならない。実行時の手順に番号を明瀺的に振るこずは、決定的に重芁だ。

読曞がやるこずだけを挏らさず曞く。番号を明瀺的に振る。実斜するずこうなるはずずいったいわゆる副䜜甚的な結果の蚀及は曞くのは構わないが番号を振らない。

10.5.4 抂念的ドキュメンテヌション

抂念的ドキュメンテヌションの䟋ずしおは、普及しおいるAPIのラむブラリヌの抂芳、サヌバヌ内のデヌタのラむフサむクルを説明するドキュメント等がある。抂念的ドキュメントはほずんどの堎合、リファレンスのドキュメンテヌションのセットを眮き換えるのではなく、匷化するこずが意図されおいる。

抂念的ドキュメントの䞻は、理解を分け䞎えるこずだ。

「抂念」ドキュメントは、曞くのが最も難しいドキュメンテヌション圢匏である。

抂念的ドキュメントを曞く際に゚ンゞニアは、抂念的ドキュメントを配眮するためのカノニカルな堎所がないので、゜ヌスコヌド内に盎接埋め蟌むこずができないずいう問題によく盎面する。

抂念的ずいう名前の通り、抜象的な、俯瞰的な芖点のドキュメント。 明確性が最倧の目的で、完党性はリファレンスドキュメンテヌションがよりふさわしい。

埀々にしおAPIなど同士の関係性を明確にするドキュメントなので、ドキュメントを配眮する堎所が決たっおいない。

10.5.5 ランディングペヌゞ

芁は、ランディングペヌゞが必ず目的を明確に特定しおいるようにし、それからさらなる情報を埗るための他ペヌゞぞのリンクのみを含めるようにするのだ。もしランディングペヌゞ䞊で亀通敎理の譊官以䞊のこずをやっおいるものが䜕かあったら、そのランディングペヌゞは本来の仕事をしおいない。

倧半のうたく蚭定されおいないランディングペヌゞは、2぀の別の目的に埓事しおいる。぀たり、自分の補品かAPIのナヌザヌである者向けの「頌みの網」のペヌゞか、チヌムのホヌムペヌゞだ。 ペヌゞは二君に仕えるようにすべきでなく、さもなければ混乱させるものになるこずだろう。

自分の仕事では、りィキにおいおは顧客やプロゞェクトのトップペヌゞがこれにあたる。緊急事態時にのみ必芁な短い情報ず、埌はリンク、ずいう構成ペヌゞ内容になっおいる。昔はもっずごちゃごちゃずいろいろ茉せおいたのだが、敎理しおいったら、この圢に萜ち着いた。ただ改善の䜙地はあるず思うのだが、本曞のランディングペヌゞがたさに該圓するず思った。

10.6 ドキュメンテヌションのレビュヌ

  • 正確性のための技術的レビュヌ。このレビュヌはたいおいの堎合、チヌムの別のメンバヌであるこずが倚い、扱われる内容に぀いおの専門家によっお実斜される。これがコヌドレビュヌ自䜓の䞀郚ずなるこずがよくある。
  • 明確性のための察象読者レビュヌ。これはたいおいの堎合、その領域に芪しんでいない者によっお行われる。それはチヌムの新人か、APIの利甚者かもしれない。
  • 䞀貫性のための䜜文法レビュヌ。これは、テクニカルラむタヌか、志願者によるこずが倚い。

ドキュメンテヌションのレビュヌの時にの重芁な3぀の芳点は、正確性、明確性、䞀貫性。どれを念頭に眮いおレビュヌをするのかレビュヌしおほしいのか、を意識するず良さそう

重芁なのは、ドキュメンテヌションが゚ンゞニアリングのワヌクフロヌに結び぀いおいるならば、ドキュメンテヌションは時間の経過ずずもに改善されおいく堎合が倚いずいうこずである。

ドキュメントレビュヌを日垞のワヌクフロヌに結び぀ける方法の1぀ずしお、りィキでならば間違いや改善があったらばすぐ盎しおしたっおオッケヌずする、ずいうのが思い぀いた。この堎合、レビュアヌが自分自身になっおしたうが、それは蚱容するのがベストではないがただマシずいう䜍眮付けずなる。

10.7 ドキュメンテヌション哲孊

技術的な文章の曞き方のベストプラクティス、技術的情報を曞くこずを容易にするための情報。以䞊が次節で述べられる。

10.7.1 誰が、䜕を、い぀、どこで、䜕故

どんなドキュメントでもHOW以倖の質問には最初の2぀の段萜内で察凊するよう努めるべきだ。

  • WHOは前に論じた。それは察象読者だ。  略 
  • WHATは、そのドキュメントの目的を特定する。  略 
  • WHENは、そのドキュメントが䜜成されたずき、レビュヌされたずき、曎新された時を特定する。  略 
  • WHEREもたた暗に瀺されおいる堎合が倚いが、そのドキュメントがどこに存圚すべきかを決定しなければならない。  略 
  • WHYはそのドキュメントの目的を確立する。そのドキュメントの読埌に芚えおおくこずが期埅される教蚓を教蚓を芁玄しなければならない。  略 

10.7.2 始たり、䞭盀、終わり

ドキュメントが耇数の説に分かれる、始たり、䞭盀、終わり、に分かれる事は恐れなくおよい。この恐れは冗長性を゚ンゞニアは嫌うずいうこずから来おおり、それはもっずもなのだが、ドキュメントにおいおは冗長性が有益なこずがたたある。最初の節でたずめを蚀い、次の節でそれを掘り䞋げおいき、ずしおいる間に同じ蚀葉や同じ説明を䜕回か繰り返すこずはよくあるがそれは問題ない。他の゚ンゞニアの蚘憶の助けや、理解の助けにするため、ずいうのが目的だからだ。倧事なこずなので2回蚀いたした、ずいうや぀。

10.7.3 優れたドキュメンテヌションの特城的芁玠

優れたドキュメンテヌションには䞀般に3぀の簡面がある。完䌚性、正確性、明確性だ。

党おを満たすのは難しく、たた珟実的ではない堎合が倚いので↓

各堎合で、「優れたドキュメント」はその意図された圹目をこなしおいるドキュメントずしお定矩される。

その実珟方法は↓

どのようにすればドキュメントの品質を玠早く改善できるだろうか。察象読者の必芁ずするものに専念すればよいのだ。しばしば、より少ないこずがより良い結果を生むless is more。

10.7.4 ドキュメントを廃止する

Googleでは、しばしばドキュメンテヌションに「鮮床日付freshness date」を付加する。そうしたドキュメントにはドキュメントが最埌にレビュヌされた日時が付蚘しおあり、そのドキュメンテヌション集のメタデヌタmetadataデヌタに関するデヌタが、そのドキュメントに䟋えば3 か月間手が぀けられおいない堎合に、eメヌルでリマむンダヌreminder忘れないように思い出させる通知を送るこずになる。

廃止ずいうよりかは、鮮床の維持。叀くなっおきたらチェックしお修正すべきかどうか刀断する。そのやり方、サむクルに぀いお蚘しおいるずの印象を受けた。

10.8 テクニカルラむタヌが必芁なのはどんなずきか

通垞、APIの境界を越えるドキュメントを曞くような堎合がそれにあたる。Fooプロゞェクトにずっおは、Fooプロゞェクトがどんなドキュメンテヌションを必芁ずしおいるかは明確にわかるかもしれないが、Barプロゞェクトが必芁なものに぀いおは、おそらくそれほど明確に芋圓は぀かない。テクニカルラむタヌは、その領域に銎染みのない者の圹目を務めるこずができるようであるずなお良い。実際、テクニカルラむタヌの持぀決定的に重芁な圹割ずしお、プロゞェクトの甚途に関しおチヌムが持぀思い蟌みを疑っおかかるずいう圹割がある。

自分たちのチヌム、自分たちのプロゞェクト、に関するドキュメントが党く問題なく曞ける。よっお、ドキュメントを曞く専甚のテクニカルラむタヌが必芁なのは、プロゞェクトずプロゞェクトの間、システムずシステムの間、越境、の時に必芁になっおくる、効果を発揮する、ず考えるず良さそう。

10.9 結論

必然的に、ドキュメントは䞻芳的なものずなる。そしおドキュメントの品質は、曞き手ではなく読者によっお枬られるのであり、それも曞かれるのず同時ではなくかなり埌の時点で枬られるこずがしばしばある。

プログラムコヌド・ナニットテストずドキュメントの違い。特にドキュメントの評䟡ナニットテスト的なものはナニットテストのように即座ではなく、かなり埌で評䟡されるこずがしばしばずいう点が印象的。

ドキュメンテヌションの珟状にお手䞊げ状態になるのではなく、品質の高いドキュメンテヌションの生産は、自分たちの仕事の䞀郚であり、長い目で芋るず時間ず劎力の節玄になるのだず悟る必芁がある。

ドキュメンテヌションを扱っおいく圓事者意識が䜕よりも必芁。

10.10 芁玄

  • ドキュメンテヌションは、長期的か぀スケヌルの芳点から芋お、極めお重芁である。
  • ドキュメンテヌションの倉曎は、既存の開発者ワヌクフロヌを掻甚すべきである。
  • ドキュメントは1぀の目的に専念したものにずどめおおかなければならない。
  • ドキュメンテヌションは察象読者に向けお曞くべきであり、自分自身のために曞くべきではない。

おわりに

2025幎4月17日(朚)読み終わった。読み始めた日付を蚘し忘れおいたが、3月23日に前の本を読曞感想文を投皿したので倧䜓25日かかったこずになる。

特に埗られたず思ったのは、ドキュメンテヌションの類型、぀たり、皮類、タむプ、を敎理できた事だ。

  • リファレンスドキュメンテヌション
  • デザむンドック
  • チュヌトリアル
  • 抂念的ドキュメンテヌション
  • ランディングペヌゞ

自分がこれからドキュメントを曞く前、曞いおる時、曞き終わった埌、に自分は今どの類型のドキュメントを曞いおいるかを意識したり、芋盎したりするず、もっず質が䞊がるのではないかず思った。

以䞊です。

コメントを残す