349 Views
March 10, 25
スライド概要
- 開発方法論の変遷
- バージョン管理
- パッケージマネージャ
- コンテナ
- 統合的コーディング環境
機械学習や音声認識に関する書籍を執筆しています。
プログラミング 新 作法 これからプログラムを書く のために ~ 人 〉 〈 ~ 6. プログラミングを支える環境 開発方法論の変遷 バージョン管理 パッケージマネージャ コンテナ 統合的コーディング環境 1
6.1 開発方法論の変遷 ウォーターフォールモデル 開発段階を要求定義・設計・実装・評価に分離し,各段階の成果物を次の段 階に順に受け渡す 長所 : 各段階での課題が明確で,進捗管理がしやすい 短所 : 要求の変更や技術の進歩に対応しにくく,柔軟性が低い アジャイル開発モデル 計画・設計・プロトタイピング・テストというサイクルを短期間で繰り返す 長所 : 初期段階でのリリースと頻繁な更新が可能 短所 : 複数の作業を衝突させずに適切に統合する必要がある 2
6.1 開発方法論の変遷 ウォーターフォールモデルとアジャイル開発モデル 要求定義 計画 リリース 設計 設計 テスト 実装 評価 ウォーターフォールモデル リリース プロトタイピング アジャイル開発モデル 3
6.1 開発方法論の変遷 バージョン管理 変更履歴を管理し,必要に応じて過去の状態に戻すことができる 複数人の作業を適切に統合するための仕組みを持つ 共有 リモート リポジトリ ローカル リポジトリ 共有 ローカル リポジトリ 更新履歴 更新履歴 4
6.1 開発方法論の変遷 実行環境の管理 パッケージマネージャ プログラミング言語ごとに提供される ソフトウェアの依存関係を管理し,必要なライブラリやツールのインス トールを補助する コンテナ アプリケーションの実行環境を仮想化し,環境の再現性を高める 5
6.1 開発方法論の変遷 コンテナの考え方 コンテナ アプリA ライブラリ1 コンテナ アプリB ライブラリ2 Python 3.6 Python 3.11 PC 6
6.1 開発方法論の変遷 統合的コーディング環境 エディタ・バージョン管理ツール・コンテナとの接続などが統合されている エディタ Git Docker 7
6.2 バージョン管理 バージョン管理とは 適宜変更されるプログラムや文書などの版を管理し,必要に応じて過去の状 態に戻すことができるようにすること バージョン管理のイメージ 版 12/1 版 12/2 差分 変更前 - int a; 変更後 + int *a; 12/3 バグ発⽣ ここに戻したい 8
6.2 バージョン管理 バージョン管理の方式 ファイル データベース checkin diff サーバ 中 のものは更新 できない checkout new version 更新 サーバ checkout checkout / chekin 更新 整合 更新 old version 更新 ローカル型 (RCS) 集中型 (CVS) 分散型 (Git) 9
6.2 バージョン管理 Git の基本操作 : リポジトリの作成 git init リポジトリ名 というコマンドでローカルリポジトリを作成 Git サーバにリポジトリを作成する場合は,リモートリポジトリを作成し,ロ ーカルリポジトリとリモートリポジトリを接続する リモートのリポジトリを複製する場合は, git clone リポジトリURL という コマンドを使用 10
6.2 バージョン管理 Git の基本操作 : 更新作業 各ファイルに対して,ステージを移動させることで現在の状態を表す ローカル ワーキングツリー ステージングエリア (インデックス) git add リモート リポジトリ リポジトリ git commit git push メッセージ git fetch git pull .git 11
6.2 バージョン管理 Git の基本操作 : 情報の取得 git log : コミット履歴を表示 --graph グラフ構造で表示, --all 全ブランチ git diff : 変更の差分を表示 引数なしでワーキングツリーとステージングエリアの差分, --cached でステージングエリアとリポジトリの差分 git status ワーキングツリーやステージングエリアの現在の状況を表示 12
6.2 バージョン管理 RC_1 v1.0.0 te fix ブランチの操作 Git では,開発履歴を枝分かれさせることができる Git のブランチは枝全体を指すものではなく,その先頭部分を指す v1.0.1 fix g bu da up in i tia lc om m it main nc fu d ad ad d fu nc 2 1 dev 13
6.2 バージョン管理 コミットの系列 コミットの系列の最新にあたるものを指すラベルがブランチ HEAD main コミットオブジェクト @user1 message 1 @user1 message 2 ブランチ @user2 message 3 ツリーオブジェクト blob オブジェクト blob オブジェクト 14
6.2 バージョン管理 GitHub リモートリポジトリに対する操作 リポジトリの複製: 「 git clone リポジトリパス フォルダ名 」 リモートに変更を送信: git push リモートブランチをローカルにマージ: git pull git fetch は更新を手元に持ってくる pull = fetch + merge 複数人での開発に対応するための fork 機能や,自動的に処理を行う GitHub Actions という機能もある 15
6.3 パッケージマネージャ パッケージマネージャの役割 ライブラリの管理 プロジェクトの構築支援: 新しいプロジェクトの作成と基本構造のセットアッ プ スクリプトの実行: コンパイルやテストなどを,設定情報が書かれたファイル の内容に従って行う ドキュメントの生成: コード中のコメントなどを元に,プロジェクトのドキュ メントを生成する 16
6.3 パッケージマネージャ パッケージマネージャによる実行環境の管理 プロジェクト 構成ファイル 作成 ... >_ 実⾏環境 参照 ライブラリの 追加‧更新‧削除 パッケージ マネージャ コマンド ライブラリの ダウンロード リポジトリ 依存関係 17
6.4 コンテナ の構成 アプリケーションを動かすための必要最小限の機能だけを備えたコンテナを 用意し,アプリケーションの依存関係をその中で管理するもの カーネルを OS と共有するため,起動・動作が高速 環境を作る(Build),共有する(Share),実行する(Run)のそれぞれが,ホスト OSの違いに関わらず同一手順で行える 構成や依存関係は Dockerfile としてテキストデータで管理し,起動イメ ージを保存したイメージファイルも普通は小さいものなので軽量 Docker 18
6.4 コンテナ の全体像 Docker Docker Hub VS Code pull push start build Dockerfile create image stop container 19
6.4 コンテナ の構成要素 Docker イメージ コンテナのひな形で,Linuxの一部,ミドルウェア,プログラミング言語 実行環境,ライブラリ,ソース,実行時に起動するプロセスが含まれる Docker Dockerfile Docker イメージの設計図.Docker イメージを構築するときに実行する コマンド・各種設定の情報が含まれる コンテナ イメージから生成された実行可能なインスタンス Docker Hub Docker イメージを公開・共有するためのレジストリ 20
6.4 コンテナ のコマンド 基本形式 : 「docker 対象 コマンド [オプション]」 対象 : image, container, volume など コマンド : build, run, exec, pull など オプション : ハイフン1つは1文字省略形,ハイフン2つは正式名 例) web サーバ Apache のコンテナを起動 Docker docker container run -d -p 8080:80 --name my-apache httpd 複数のコンテナを連携させる場合は,Docker Compose を使う docker-compose.yml ファイルに一連のコマンドを記述して,ビルドや 起動を自動化 21
6.5
統合的コーディング環境
エディタとしての VS Code
ワークスペース単位でプロジェクトを管理
@workspace
マルチ‧ルート‧ワークスペース
code-workspace
フォルダB
ワークスペースの設定
"settings": {
"property.A": false,
"gui.B": "Default Light+"
}
@terminal
シングル‧フォルダ‧ワークスペース
フォルダ
ファイル
ファイルB
ファイルC
ーーーーー
ーーーーーーーー
ーーーーーー
ーーーーーーーー
ーー
.vscode
フォルダD
フォルダA
ワーク
スペース名.
ターミナル
GitHub Copilot Chat
ワークスペース
ファイルA
.dev
container
IntelliSense
>< Remote Development
コンテナ
GitHub Copilot
22
6.5 統合的コーディング環境 における設定 テーマ・フォント・拡張機能などがさまざまなスコープで設定可能 VS Code ワークスペース設定 上書き GitHub ユーザ設定 アカウント Microsoft 上書き アカウント デフォルト設定 設定を共有 設定内容 ‧テーマ,フォント,拡張機能,… 23
6.5 統合的コーディング環境 クライアントとしての VS Code VS Code はさまざまなコーディング支援機能を内部に実装するのではなく, 外部と連携したクライアントとなることで高い拡張性を実現 インテリセンス ユーザのキー入力を監視し,次に何を入力しようとしているのか推測し て表示する エディタと言語サーバが通信する LSP (Language Server Protocol) を利 用 デバッガ DAP (Debug Adapter Protocol) を利用して,各言語のアダプタを実装す ることで,プログラミング言語非依存のデバッグ機能を実現 24
6.5 統合的コーディング環境 生成AIの活用 : GitHub Copilot の活用 大規模言語モデルを用いてコードの自動生成を行う コメントのみからでもコード生成が可能 逆にコードからコメントを生成させることも有効 ユーザの入力に対して,適切なコードを提案する メソッド名やフィールド名を機能を反映させたものにすることで,生成 されるコードの品質が向上する 25
6.5 統合的コーディング環境 生成AIの活用 : GitHub Copilot Chat の活用 コーディング作業中に本来の生成AIが得意とする文章生成機能を活用し,コ ードの解説や改善点の提案をさせることが可能 chat の対象をエージェントとして指定可能 エージェント 用途 @terminal ターミナルで実行したコマンドに対するchat @vscode VS Code 自体に対するchat @workspace 現在のワークスペースに対するchat 26
6.5 統合的コーディング環境 Git との連携 ステージング 「変更」の行以下に前回の作業以降変更があったファイルが並ぶので, 「ステージされている変更」に加えるファイルを選択することができる コミット 「コミット」ボタンの上の入力欄にコミットメッセージを書き,コミッ トボタンを押すとコミットされる プッシュ 「コミット」ボタンの右側からプルダウンメニューを開き,「コミット してプッシュ」を選ぶと,リモートリポジトリにプッシュされる 27
6.5 統合的コーディング環境 VSCode のソース管理 28
6.5 統合的コーディング環境 との連携 : VS Code から Docker を使用する手順 i. VS Codeからプロジェクトフォルダを開き,表示される Reopen in Container を押す(または左下の緑の部分をクリックしてRemote Containers: Reopen in Containerを選択する)と,devcontainer/devcontainer.json が読み込まれる ii. devcontainer.json のリモート開発時の設定や,Docker Compose が実行され る iii. VS Codeがコンテナに接続され,エディタでのコード編集や,ターミナルで のコマンド実行が可能になる Docker 29
6.5 統合的コーディング環境 との連携 (https://code.visualstudio.com/docs/devcontainers/containers) Docker 30
6.6 まとめ バージョン管理 : Git, GitHub 開発途中の変更を管理し,過去のバージョンに戻せる チーム開発では各自の更新の競合を解消する パッケージ管理 : Cargo, pip, npm ライブラリのインストールや依存関係解消を補助する コンテナ : Docker 仮想環境を構築する 統合開発環境 : VS Code Git や Docker との連携が優れている Copilot によりコーディング支援が可能 31