ニワトリのたまご

宇宙とソフトウェア開発

【書評】This is Lean | ソフトウェア開発現場の改善のヒント

会社でみんなが残業して頑張っているのに、なかなか成果が出ない状況が続いています。そんなときに出会ったのが「リソース効率」と「フロー効率」という考え方。この本を読んで、いまの開発のやり方を見直すきっかけになったので、感想とともに自分の体験を交えてまとめてみます。


リソース効率とフロー効率の違い

本書では、まずこの2つの効率について病院の例を挙げて説明しています。

大病院では各診療科がフル稼働していても、患者は診断まで長時間待たされる。これが「リソース効率は良いけど、フロー効率は悪い」状態。

これは、ウォーターフォール開発もまさに同じ構造だと感じました。
フェーズごとに人をかければリソース効率は高まりますが、ユーザはすべての工程が終わるまで成果物を確認できない。この構造が、現場が疲弊しているわりに顧客には良い価値を提供できていない温床になっていると改めて思いました。


改善のための3つの法則

本書では、以下の3つの法則をもとに改善方法が解説されていました。

1. リトルの法則

スループット時間=プロセス内のフローユニット数×サイクル時間

リソース効率を高めるには一度にたくさんのフローユニットを抱え込んだ方が良い。しかしリトルの法則に当てはめるとこれがスループット時間を長くする原因になっている。フローユニット数を少なくすることでスループット時間が短縮でき、フロー効率を高めることができる。


2. ボトルネックの法則

プロセス内でサイクル時間の最も長いステージのせいで、プロセス全体のスループット時間が影響される

ボトルネックを特定し解消するアプローチはソフトウェア開発をやっていると自然に身につく考えです。例えば、ソフトウェアの性能改善の場面では処理ステップごとの時間を計測し、全体を俯瞰した際にいちばん時間のかかる部分から手を付けるのが定石。 ただし、作業プロセスの改善になると途端に見逃しがちになるのも事実かと思います。というのも、組織が細分化されて誰も作業の全体像を把握できていないためです。本書のTOYOTAの例のように、作業の可視化と共有が重要だと再認識しました。


3. プロセスに対する変動効果の法則

稼働率が高くなるとスループット時間が上がる、この相関は変動が高いほど強くなる

もし高速道路を走るすべての車が同じ速度で進むなら、渋滞が起こることはないだろう

これも実感があります。
スケジュールのズレが積み重なると、最後にしわ寄せがきて、いつも遅れるのは同じ部分。変動を抑えるために、作業を標準化したり変動しないように管理するなどの仕組みづくりが必要です。


一次ニーズと二次ニーズを整理する

本書のなかで特に印象に残ったのが「一次ニーズと二次ニーズ」の整理。

例えば、私の職場では設計は自社、コーディングとテストは協力会社に依存しています。
そのため詳細設計書をソースコードレベルで作り込むのですが、本来、設計と実装を同じ人がやるならもっとシンプルにできる作業。これは二次ニーズの典型だと思っています。

  • 本当に必要な一次ニーズなのか?
  • 構造上、発生してしまっている二次ニーズなのか?

この視点でプロセスを整理することが、無駄を減らし改善の第一歩になると感じました。
できるなら自社で手を動かす範囲を増やすか、協力会社に設計も任せるなど、無駄な境界線を減らしていきたいところです。


フロー効率改善の難しさと日本の開発構造

そして最後に、本書を読んで改めて感じたのがフロー効率改善の難しさです。

なぜなら、フロー効率を改善するには顧客と接点を持ち、プロセス全体をコントロールする主導権が必要だから。
今の日本のソフトウェア開発は多重請負構造になっていて、生産性が低いことで知られています。

この構造だとプロセス全体の問題意識の共有が難しくなる
フロー効率を上げるには、下請けに丸投げせず、自分たちで手を動かしていくことも大事。これが簡単ではないけれど、現場で改善できるところから始めていきたいと思いました。


まとめ

『This is Lean』は、現場改善に悩むエンジニアにとって、具体的なヒントと改善の視点をくれる一冊でした。

  • 一次ニーズと二次ニーズの整理
  • ボトルネックの可視化と改善
  • フロー効率を意識したタスク設計

こうした実践的な考え方を、少しずつ現場に取り入れていきたいと思います。

【書評】単体テストの考え方/使い方

私のプロジェクトではテストコードがなく常に人手を介してテストを実施している。そこでテストコードを導入したいと考え、指針を探していた。世間には単体テスト結合テストの手法に関する書籍が多い中、本書は良いテストとは何かを深く掘り下げており、最適な内容だった。

著者はVladimir Khorikov氏。アメリカのソフトウェアエンジニアでPluralsightという学習サービスで講師も務めている。ブログも最近までは更新されているようだ。

enterprisecraftsmanship.com

この本は私のように、これからテストコードを書いていきたい人がぜひ読むべき一冊だ。本書では良い単体テストが備えるべき性質を4つ挙げており、それらの性質を備えるためにテストコードで考慮するべき事項を解説している。

  • 退行に対する保護: テスト実行時になるべくたくさんのプロダクションコードを含めること
  • リファクタリングへの耐性: 内部的なコードではなくテスト対象の実行結果をテストする
  • 迅速なフィードバック: テストを速やかに行えるようにする(実行時間、準備の容易性)
  • 保守のしやすさ: テストケースのサイズを小さく、プロセス外依存を少なく

また、単体テスト/結合テストで注力すべき点や目指す点についても説明しており、テストコードをプロジェクトに導入していく際にどこから取り組むべきなのかの指針を与えてくれる。

本書で特に印象的だったのは、「コードもテストも負債である」という考え方だ。テストは多ければ多いほど良いと考えがちだが、実際にはコードもテストも増えるほどバグのリスクが高まり、保守コストも上がる。そのため、テストを資産ではなく負債と捉え、最小限で最大の価値を生むよう設計するべきだと説いている。

よくある誤解の一つが、テストの網羅率を100%にするべきという考えだ。網羅率を100%にすると、重要なロジックがない部分にもテストを書かなければならない。しかし、本書では「取るに足らないコードにはテストを書かず、重要なロジックに集中するべき」と述べている。

さまざまなロジックに対してどうテストを書くかというのはよく議論されるが、テストを書かなくてもよい点に言及しているのは他の書籍ではあまり見られない視点であり、コードとテストに対する考え方を見直すきっかけになった。

【書評】誕生 国産スパイ衛星 独自情報網と日米同盟

お正月に改めて読み返した。情報収集衛星が誕生する過程で、省内、アメリカ、国内メーカー、中国や北朝鮮などの隣国との関係と相対する動きについて綿密に記している。

2005年に書かれたもので少し古い本であるが、秘密の多い我が国の情報収集衛星についてこれでもかというくらい当時の内情を暴露(?)している。

防衛大臣になる前の石破茂氏(このころすでに軍事に関して一目置かれていた)や、当時の内閣総理大臣である森喜朗氏も出てきて少し懐かしい感じもあった。

以下、本書の概要をピックアップする。

  • 情報収集の分野では当時米国が圧倒的な技術力を持っており、自国の衛星を持たない日本は米国からもたらされる情報への依存度が強かった。しかし、北朝鮮弾道ミサイルの動きについて、米国が必ずしも即時に情報を提供していないことへの懸念が強まり、日本の情報インフラの独立性を担保する目的で情報収集衛星の機運が高まった。
  • 当時の日本の技術力では要求性能を満たせない懸念があり、姿勢制御のための三軸リアクションホイールが実現できないなど技術的な壁があった。また米国の衛星を購入すれば半額で済むなど費用面での問題もあったが、自国の宇宙技術の向上と、部品をブラックボックス化させないために国産を前提として開発された。
  • 情報収集衛星は宇宙の平和利用に抵触しないために災害対応も含めた多目的多機能衛星とされた。ただし、そのような一般化を進めることは、政府の調達ガイドラインに抵触し公開入札を適用しなければならない。そのため、情報収集衛星は「総合的な危機管理衛星」であり広い意味で日本の安全を確保する衛星であると解釈することでその、平和利用と調達ガイドラインをすり抜けることができた。
  • メーカーでは当初は日本電気が先行して研究していたが、防衛省水増し請求問題により指名停止となっており、三菱電機が開発を受注した。
  • 省内では当社は外務者や文科省が主導しており、画像分析能力のある防衛省は一歩引いた姿勢をとっていた。しかし、開発が本格化するにつれ防衛省の存在感が増し情報管理の仕組みは防衛省の考え方が浸透していった。
  • 情報収集衛星は2003年に無事打ち上げられたが、最初期の二機体制では、2004年の中国潜水艦の領海侵入に対して有効な情報を得ることができず、執筆時点では目論見通りの役目を果たしているとは言い難い。これからの機数増による体制強化に期待。

宇宙関係の書評をまとめています。 よろしければ他の書評もどうぞ。

niwanoniwatori.hateblo.jp

宇宙関係の書評まとめ

宇宙関係の書評が貯まってきたのでまとめページを作りました。読み次第更新していきます。

ブログには基本的にはオススメの本しか書評を書いていないので面白い本ばかりだと思います。

人工衛星

宇宙探査機はるかなる旅路へ: 宇宙ミッションをいかに実現するか

2025時点のJaxaの理事長、山川 宏の著書。宇宙探査機開発の全貌が学べます。

niwanoniwatori.hateblo.jp

人工衛星の“なぜ”を科学する

NECの衛星を中心に衛星開発の概要がまとめられています。

niwanoniwatori.hateblo.jp

ロケット

ロケットサバイバル2030

H3のことが知りたい方向け。個人的に松浦晋也さんの書籍は大好きです。

niwanoniwatori.hateblo.jp

安全保障

宇宙安全保障 宇宙がもたらす恩恵と宇宙の軍事脅威増大の相克

日本と各国の安全保障に関する組織構造とその考え方を知りたい方に。

niwanoniwatori.hateblo.jp

誕生 国産スパイ衛星 独自情報網と日米同盟

情報収集衛星の誕生経緯についてこれでもかというくらい詳細に記されています。

niwanoniwatori.hateblo.jp

開発史

日本の宇宙開発最前線

松浦晋也さんの書籍。スペースXの躍進と、対比して日本の宇宙開発の主に政策面での歴史を知ることできます。みちびきの開発経緯はかなり面白い。

niwanoniwatori.hateblo.jp

軌道力学

惑星探査機の軌道計算入門

軌道力学に興味がある方向け。高校レベルの数学・物理を理解していればすっと読めます。

niwanoniwatori.hateblo.jp

人工衛星・惑星探査機のための宇宙工学

軌道力学を学びたい方向け。大学で軌道力学を学ぶ際の入門レベル。とてもわかりやすい。

niwanoniwatori.hateblo.jp

【書評】ロケットサバイバル2030

H3のこれまでの開発史を俯瞰し、今後どうやって生き残っていくのかを解説した本。H3の機能や開発の特徴や、他国のロケットと比べたときの強みと弱みがよくわかる。

タイトルの2030は、2030年代にはファルコン9ような回収・再利用型のロケットが一般化してくるタイミングであり、究極の使い捨てロケットであるH3はどのように舵を切るのか、という意味が込められていると思われる。

ようやく打ち上がった日本のロケットH3だけど、そもそもどんなロケットなの?他国と比べてどうなの?国際競争力はあるの?というH3、ひいては日本のロケット開発の今後について関心がある人にオススメの一冊。

以下、自分が知りたかった観点で本書の内容をまとめる。

H3の特徴は?

形態

  • 使い捨て型
    • 従来のHII-Bから打ち上げ準備期間を1年へ半減、機体コストを半減させてコストダウンを図ったのがH3、究極の使い捨てロケット

準備期間半減とコストダウンに向けた特徴

  • 新規開発のメインエンジン「LE-9」
    • エキスパンダー・ブリード・サイクル
    • 副燃焼室が不要でコストダウン可能、一部が破損しても全体に広がることの少ない高い堅牢性
    • ただし本来は大型エンジンには不向き
  • アビオニクスのネットワーク化
    • 配線がシンプルに、検査コスト低減
  • 電動バルブ
    • 燃焼試験や打ち上げ準備効率化
  • 3Dプリンターによる部品の製造
  • 固体ロケットブースターSRB-3を使用しない構成が可能
    • 大推力のエンジンLE-9を3基装着
    • SRB-3なしにすることでコストダウン

輸送能力

主要顧客

  • HII-BまではIGSなどの国内の官需
  • ユーテルサットと複数の衛星を打ち上げると合意

他のロケットとの比較

SpaceX/ファルコン9

形態

  • 回収・再利用型
    • ピンドル型インジェクターと、第一段と第二段で同型のエンジンを多数(9基)搭載することで推力の調整が可能
    • アジャイルで開発、確立した技術をどんどん改造

輸送能力

  • ファルコン9 地球低軌道に22.8トン
  • ファルコンヘビー 地球低軌道に63.8トン
  • スターシップ2 地球低軌道に100トン
  • スターシップ3 地球低軌道に200トン

主要顧客

アリアングループ・ESA/アリアン6

形態

  • 使い捨て型
    • アリアン5からコスト半減
    • 再利用可能なエンジン、プロメテウスを開発中、ベンチャー企業マイアのロケットに使用し再利用回収技術を習得していく

輸送能力

主要顧客

  • チャレンジャー事故もあって自国の打ち上げ能力を喪失したアメリカの状況もあって、スペースX以前の打ち上げの商業打ち上げ市場の過半を占めていた
  • Amazon「プロジェクトカイパー」

ULA/ヴァルカン

形態

  • 使い捨て型
    • 既存ロケットからコスト半減
    • ロシア製エンジン使用からの脱却
    • 将来の回収・再利用型ロケットに発展させる構成が検討されている

輸送能力

  • VC0(ブースターなし) 地球低軌道に9トン
  • VC2(標準構成) 地球低軌道に16.3トン
  • VC6(最大構成) 地球低軌道に25.6トン

主要顧客

  • スペースX以前はアメリカ政府の安全保障や気象観測、宇宙科学などの官需打ち上げのほぼ全てを担っていた

ブルーオリジン/ニューグレン

形態

  • 回収・再利用型

輸送能力

主要顧客

  • Amazon「プロジェクトカイパー」

中国/長征

形態

  • 使い捨て型/回収・再利用型
    • 長征8および将来ロケットの長征9は回収・再利用型の計画

輸送能力

  • 長征5(打ち上げ能力最大) 地球低軌道25トン
  • 長征6 太陽同期極軌道に約1トン
  • 長征7 地球低軌道に13.6トン
  • 長征8 地球低軌道に8.1トン
  • 長征11(運用性が高い) 地球低軌道に0.7トン
  • 長征9 地球低軌道に150トン(予定)

主要顧客

  • 国内需要(1万基以上のコンステ計画が3つ)
    • 国営の中国衛星網絡集団による「国網(GW:衛星数1万2992機)」
    • 上海市政府直轄の上海垣信衛星科技による「千帆星座(G60:衛星数1万5000機)」
    • 民間企業の上海藍箭鴻擎科技による「鴻鵠(Honghu-3:衛星数1万機)」

H3には国際競争力はあるのか?

  • H3は究極の使い捨てロケットというのが特徴
  • 固体ロケットブースターSRB-3なしの構成H3-30では機体単価50億円以下という目標
  • 機体調達から打ち上げのコストの概算(括弧内は1ドル150円とした場合の換算)は
    • H3-30:60億円(4000万ドル)
    • H3-22:70億円(4700万ドル)
    • H3-24:90億円(6000万ドル)
  • 能力的にはH2-24と同等のfalcon9では打ち上げ価格6700万ドル(+オプションが上乗せ)
  • コスト的には国際競争力はある
  • 使い捨て型と比べて回収・再利用型がコスト的に有利かはまだ明らかではない
  • 打ち上げ頻度は回収・再利用ロケットの方が高い、衛星コンステ構築で有利
  • 現在のH3をブラッシュアップしつつ、回収・再利用の技術を獲得を狙うべき

【書評】宇宙安全保障 宇宙がもたらす恩恵と宇宙の軍事脅威増大の相克

アメリカ、中国、ロシア、日本、それぞれの国での特に宇宙安全保障に関する政策の方向性や、組織構造について説明されている。 各国の宇宙政策の方向性や主要組織の要点は以下。

アメリ

  • 宇宙政策は一貫して、「宇宙におけるリーダーシップの維持」
  • 主要組織は、民生分野は米航空宇宙局(NASA)、軍事・安全保障分野は米宇宙軍(USSF)
  • NASAの任務は「すべての人々の利益のために宇宙の秘密を探究すること」
  • 宇宙軍の任務は「宇宙軍は、統合軍と連合軍の戦いを強化するグローバルな宇宙作戦を実施するためにガーディアンを組織化、訓練、装備の責任を負い、同時に国家目標を達成するための軍事的選択肢を意識決定者に提供する」

中国

  • 中国共産党の権力独占を維持することが最優先の目標
  • 一部の民生分野や科学研究を除き、ほとんどが軍の統制化にある
  • 宇宙を制するものは地球を制するという信念があり、宇宙における覇権の阻止を狙っている
  • 主要組織は、中国人民解放軍。特に、戦略支援部隊の役割が大きい。戦略支援部隊は、宇宙、サイバー、電磁波領域の情報を統合する責任を持つ。
  • 戦略支援部隊は2024年4月に解体され、情報支援部隊、サイバー空間部隊、軍事宇宙部隊が編成

ロシア

  • 自国の宇宙開発を国際舞台においてリーダシップを発揮する貴重な手段であると考えている
  • 軍事ドクトリンによると「宇宙は戦闘領域であり、宇宙における覇権を獲得することが将来の紛争に勝利するための決定的な要因になる」
  • 衛星や有人宇宙船を破壊できる地上発射の対衛星ミサイルを開発している
  • 軍事と民間の宇宙組織はほぼ分離しており、民生分野をロスコスモス、軍事分野をロシア航空宇宙軍(VKS)が主導

日本

  • 憲法第九条に起因して「宇宙の平和利用」に重きを置いている
  • 国際的には「平和目的の宇宙利用とは、防衛目的の軍事利用を含む」であるため宇宙戦の面では遅れている
  • 2008年の宇宙基本法により、宇宙開発利用は宇宙条約等の国際約束に従い日本国憲法の平和主義の理念に則り行われるものとする、となった。宇宙条約は防衛目的の軍事利用を禁止していないため、これにより宇宙により防衛目的の兵器を配備できるようになった
  • 宇宙安全保障の目標は「我が国が、宇宙空間を通じて国の平和と繁栄、国民の安全と安心を増進すること。同盟国・同志国等とともに、宇宙空間の安定的利用と宇宙空間への自由なアクセスを維持すること」

【書評】ドメイン駆動設計をはじめよう

ドメイン駆動設計というと値オブジェクトのような戦術的設計に関して聞いたことある程度であったが、どちらかというとコーディングやモデリングの話だと思っていたので学習の優先度を落としていた。

本書を読むとそれはドメイン駆動設計の一部しか見えていなかったのだと痛感した。事業領域、業務領域の分析や、業務領域の分類といった戦略的設計についてはこれこそ自分と自分のプロジェクトに欠けている考えだと感じた。

また、ドメイン駆動設計は難解であると巷の評判でもあったことも敬遠していた理由の一つであったが、本書は説明が平易で非常にわかりやすかった。本のタイトル通り、ドメイン駆動設計の入門書として最適な一冊である。

本書は評判の本でありまとめ的な書評も多く出回っている。 そのためここでは、ソフトウェア開発における私の数年来の疑問、「トランザクションスクリプトは悪なのか」について、本書を読むことでどう解決したのかを記すことで、本書を読むことで得られる知識のイメージを掴んでもらうことを目指す。

トランザクションスクリプトは悪なのか?

近年のソフトウェア界隈では、トランザクションスクリプトは悪なので、ドメインモデルを採用したらハッピーになりました、という使われ方をすることが多いように思う。

しかし、自分のプロジェクトもトランザクションスクリプトを採用しているがそれでもなんとかやって来れている。確かに同じような処理が散らばっている問題はあるが致命的な状態ではない。その同じような散らばってる処理が条件分岐の塊なのはイケてはないけど...。

なんならトランザクションスクリプトは事前説明せずにみんな理解できるので、開発のたびに外注を増員するというスタイルの上では都合が良かったりもする。本当にトランザクションスリプトは悪なのだろうか?

結論から言うと答えはNo、トランザクションスクリプトは悪ではない。

ドメイン駆動設計のアプローチとして「業務領域のカテゴリーを特定」「業務領域ごとに適切な業務ロジックの実装方法を選択」というものがある。 業務領域は、それらが競争優位性をもたらすかや複雑さに応じて以下のように分類される(「1章 事業活動を分析する」参照)。

カテゴリー 競争優位 複雑さ 変化
中核 複雑 多い
一般 × 複雑 少ない
補完 × 単純 少ない

ドメインモデルは複雑な業務ロジックを扱う際に威力を発揮するため、中核の業務領域の場合に採用を検討するべき実装方式である(「6章 複雑な業務ロジックに立ち向かう」参照)。一方で単純な業務ロジック、補完の業務領域に対してドメインモデルを採用するのは重すぎる。本書でいう「不必要な複雑さ」を引き起こす(「付録A ドメイン駆動設計の実践:事例研究」参照)。

トランザクションスクリプトはそんな業務ロジックが単純な場合に適している実装方法である(「5章 単純な業務ロジックを実装する」参照)。

リソースは有限であるため、中核の業務領域と補完の業務領域を同じ力で開発していたらダメなのである。トランザクションスクリプトは悪ではなく、業務ロジックが単純な場合にサクッと開発してしまうための一つの選択肢として成立する。

自分のプロジェクトでトランザクションスクリプトを採用していても破綻していないのは、ほとんどの業務ロジックが複雑ではないからだろう。

実装方法の前に事業活動を分析するべき

本書を読んだ今気になるのは、冒頭に記載した、

その同じような散らばってる処理が条件分岐の塊なのはイケてはないけど...。

である。これは本当にいいのだろうか?

「10章 設計の経験則」に照らすと、「入り組んだ業務ルール、不変条件、最適化のアルゴリズムが含まれる」場合はその業務ロジックは複雑な業務ロジックである。

この条件分岐の塊の処理たちは他の単純な業務ロジックと同じ、トランザクションスクリプトで実装して本当に良いのだろうか?

業務ロジックが複雑ということはこの業務領域は中核の業務領域なのではないか?いやそもそもそんな業務領域の分析なんてしてるか...?

ドメインモデルなのか、トランザクションスクリプトなのかという実装方式の違いの前に、事業活動を分析して注力するべき事業領域とそうでない事業領域を分類すること、これこそが今のプロジェクトに必要であることを本書を通して学ぶことができた。

おまけ

このトランザクションが悪なのかどうか、と言う議論はネットを漁るとちょくちょく見かける。

speakerdeck.com

zenn.dev

本書を読むことでそれぞれの実装方法の良し悪しが分かりより良いトレードオフの判断につながると思う。