Slide 1

Slide 1 text

UNIX 哲学とアジャイルと AWS と KOITABASHI Yoshitaka 2023/2/13 yoshii0110 1

Slide 2

Slide 2 text

2023/2/13 yoshii0110 2 KOITABASHI Yoshitaka @yoshii0110 KDDIアジャイル開発センター株式会社 Amazon EC2, AWS Fargate, Amazon SQS 🥷 🏢 💕

Slide 3

Slide 3 text

UNIX と UNIX 系システムの系統 2023/2/13 yoshii0110 3 引用: https://commons.wikimedia.org/wiki/File:Unix_history-simple.svg

Slide 4

Slide 4 text

余談: FreeBSD は EC2 で動かせる AMI がある 2023/2/13 yoshii0110 4

Slide 5

Slide 5 text

UNIX 哲学の歴史 • 1978年 マキルロイの UNIX 哲学 AT&T ベル研究所プログラマー パイプの発明者 • 1994年 ガンカーズの UNIX 哲学 DEC のプログラマー x window system 開発チームメンバー • 2003年 レイモンドの UNIX 哲学 オープンソース推進団体 OSI の共同創設者 「伽藍とバザール」の著者 2023/2/13 yoshii0110 5

Slide 6

Slide 6 text

余談: UNIX ってなぜ UNIX というのか • ケントンプソンが PDP-7 で作っていた当時のUnixが同時に ひとりのユーザしか処理できなかった • 同僚がジョーク混じりにこのシステムのあだ名を UNIplexed Information and Computing Service (UNICS) にしたのが語源 2023/2/13 yoshii0110 6

Slide 7

Slide 7 text

余談: パイプの起源 パイプとは、あるプログラムの出力を、他のプログラムの入力に接続するための、 統一されたメカニズム 例: > cat /etc/group | fgrep appserver _appserverusr:*:79: _appserveradm:*:81: • このパイプは、ケン・トンプソンが考案した訳ではなく、マキルロイがトンプソンに強く何度も提案 • 根負けしたトンプソンがある夜、たった一晩で僕がやるといい実装してしまった • ちなみに、マキルロイが提案していたパイプは > で、トンプソンは | を提案し実装 2023/2/13 yoshii0110 7

Slide 8

Slide 8 text

UNIX 哲学 • UNIX 哲学とは、 Unix 開発者たちの経験に基づいた 文化的な規範と哲学のまとめ • UNIX は UNIX 哲学を実践した最初のシステム 2023/2/13 yoshii0110 8

Slide 9

Slide 9 text

それぞれの UNIX 哲学 2023/2/13 yoshii0110 9 マキルロイの UNIX 哲学 (Perter H.Salusがまとめたもの) 一つのことをうまくやるプログラムを書け 連携するプログラムを書け 標準入出力(テキスト・ストリーム)を 扱うプログラムを書け。 標準入出力は普遍的なインターフェース なのだ ガンカーズの UNIX 哲学 スモール・イズ・ビューティフル 各プログラムが一つのことをうまくやるようにせよ できる限り早く試作せよ 効率よりも移植しやすさを優先せよ 単純なテキストファイルにデータを格納せよ ソフトウェアを梃子(てこ)として利用せよ 梃子の効果と移植性を高めるために シェルスクリプトを利用せよ 過度の対話的インターフェースを避けよ すべてのプログラムをフィルタとして設計せよ レイモンドの UNIX 哲学 モジュール化の原則 驚き最小の原則 明確性の原則 沈黙の原則 組み立て部品の原則 修復の原則 分離の原則 経済性の原則 単純性の原則 生成の原則 倹約の原則 最適化の原則 透明性の原則 多様性の原則 安定性の原則 拡張性の原則 表現性の原則

Slide 10

Slide 10 text

余談: DEC という会社と移植性 ガンカーズのUNIX哲学: 効率よりも移植性 DEC という会社: さまざまなアーキテクチャのコンピュータを開発 • さまざまなコンピュータに Unix を移植していた • 当時、ベル社で生まれた Unix からいろんな派生の Unix が 生まれ、各社自社の Unix マシンを売るため、 独自の機能をつけていく • なので、Unix 上で書いたプログラムを移植する時は、 シェルスクリプトを使うべきと書籍では書いてあった 2023/2/13 yoshii0110 10

Slide 11

Slide 11 text

一つのことをうまくやるプログラムを書け Q: なぜか? A: 万能型のプログラムは、たった一つのプログラムを使えばよいので、 ユーザには受けがよいかもしれない だが、そうしたプログラムは問題がある 1.書くのが難しい 2.保守やデバッグが難しい 3.新しい状況に合わせて機能を拡張するのが難しい 2023/2/13 yoshii0110 11

Slide 12

Slide 12 text

プログラムは用途別の工具であるべき • 要するに、個々のプログラムは、 「1つの仕事だけをきちんとする」だけで良いということ • これならば、設計も、コードを書くのも、修正も簡単 • また、個々のプログラムを適切な仕組みを使って、組み合わせると、 全体が部分の総和以上になることに Unix の開発者は気づいた 2023/2/13 yoshii0110 12

Slide 13

Slide 13 text

ある用途専用のプログラムをいくつか組み合わせると、 どのプログラムも責務と持っていない作業ができるようになる 2023/2/13 yoshii0110 13

Slide 14

Slide 14 text

UNIX 哲学は死なない • UNIX 哲学の応用範囲は広がっている • ソフトウェア技術の進化やクラウドコンピューティングが 広まったことで、UNIX 時代と全く同じ哲学で、という訳ではなく、 UNIX 哲学が上手く適応されながら広がっている 2023/2/13 yoshii0110 14

Slide 15

Slide 15 text

アンドリュー・タネンバウムと MINIX アンドリュー・タネンバウム: MINIXの父、 大学教授 ワーナーは、タネンバウムの教え子 自分の一番重要な仕事は、コンピュータ科学を修めた優秀な学生を 多く育てること MINIX: 教育目的の Unix 系 OS 初期バージョンは、フロッピーディスク単体で運用ができた MINIX 3は、ハードウェアを要するもののマイクロカーネル本体のコードは 4000行弱 2023/2/13 yoshii0110 15

Slide 16

Slide 16 text

アンドリュー・タネンバウムの教訓 • ソフトウェアはガスのようなもので、 入れ物がいっぱいになるまで膨らんでいく • サイズは重要 • 将来現れるかもしれないハードウェアにも適応できるような設計を 心がけよ • ハードウェア特有の特殊な機能に頼らなければ、 新しいプラットフォームへの移植がより簡単になる 2023/2/13 yoshii0110 16 引用: https://dl.acm.org/doi/10.1145/2795228 引用: http://member.wide.ad.jp/~shima/publications/Lessons_learned_from_30_years_of_Minix-JP.html

Slide 17

Slide 17 text

UNIX 哲学は、ソフトウェアの開発に 応用できる考え方でもある 2023/2/13 yoshii0110 17

Slide 18

Slide 18 text

Unix Philosophy and Node.js npm を作ったアイザック・シュルーターが TXJS2013 で こんなことを言ってます 「Unix Philosophy is an outlook for software development, not any specific technical development in software. 」 UNIX 哲学は、ソフトウェア開発の展望であって、 ソフトウェアにおける特定の技術的開発ではない 2023/2/13 yoshii0110 18 引用: https://blog.izs.me/2013/04/unix-philosophy-and-nodejs/

Slide 19

Slide 19 text

ロブ・パイクのプログラミング5ヶ条と Go言語 • プログラミング5ヶ条 • ルール4:派手なアルゴリズムは単純なアルゴリズムに比べてバグが多く、 実装も大変なので、シンプルなアルゴリズムとシンプルなデータ構造を 使うようにすること • Go言語の設計思想 • Go Conference 2014 Autumn での基調講演「Simplicity is Complicated」 • ロブパイクは、Go言語が成功した要因は「 Simplicity(単純さ) 」にあると語る • 可読性が最重要項目 • 可読性のあるコードは、信頼できる • 信頼できるコードは、理解しやすく、取り組みやすく、壊れてしまっても 簡単に修正できる 2023/2/13 yoshii0110 19 引用: http://users.ece.utexas.edu/~adnan/pike.html 引用: https://go.dev/talks/2015/simplicity-is-complicated.slide#1

Slide 20

Slide 20 text

マイクロサービスアーキテクチャ • UNIX 哲学 • 1つのことをうまくやる • 連携するプログラムを書け • マイクロサービス • ビジネスドメインに基づいて分割され独立して デプロイ可能なサービス • 疎結合で独立性が高い • つまり、単一の大きなソフトウェアを作るのではなく、 複数のプログラムの集まりとして作ることでメンテナンス性、 アジリティ、開発チームの自立性、サービスの堅牢性が向上 2023/2/13 yoshii0110 20

Slide 21

Slide 21 text

AWS が提供しているサービス数 2023/2/13 yoshii0110 21

Slide 22

Slide 22 text

UNIX 哲学と AWS 2023/2/13 yoshii0110 22 • AWS の各サービスはそれぞれ役割が違う • Amazon の内部は、Two Pizza ルールにて、1つのチームが 1つのコンポーネントに集中し、全体像を意識する必要がないよう 組織も考えられている => 1つのことをうまくやらせる

Slide 23

Slide 23 text

Amazon EventBridge Pipes 2023/2/13 yoshii0110 23 • 昨年の re:Invent にて Amazon EventBridge Pipes が登場 • ソースとターゲットの間で「イベント」を受け渡す • その際に他のサービスをかませて加工できる 個々のプログラムを適切な仕組みを使って、組み合わせると、 全体 が部分の総和以上になること => 1つのことをうまくやらせる

Slide 24

Slide 24 text

UNIX 哲学とアジャイル 2023/2/13 yoshii0110 24 引用: https://agilemanifesto.org/iso/ja/manifesto.html 引用: https://www.ipa.go.jp/files/000065601.pdf UNIX 哲学: できる限り早く試作せよ アジャイル: 早くお客さんに価値を届けることが重要

Slide 25

Slide 25 text

UNIX 哲学とアジャイルと AWS と • AWS のサービスは、UNIX 哲学を体現している • だが、 AWS のサービスをただ使うだけでは、できる限り早く試作したり、 お客様にサービスをすぐに提供できない。 • AWSのサービスを使い俊敏にお客様にサービスを提供するには、 クラウドサービスを使うための組織、開発手法が必要 そう、それがアジャイル 2023/2/13 yoshii0110 25

Slide 26

Slide 26 text

「UNIX 哲学とアジャイルと AWS と」 これらが 組み合わされた時に我々は、現代のソフトウェア開発において UNIX 哲学を体現しているといえるのではないか? 2023/2/13 yoshii0110 26