Share
Embed
【Go ハンズオン】Windows / Linux コマンドを Go で再現
GDG on Campus Kyoto University & Kyoto.go 共催
uji
March 01, 2026
Transcript
43 slides
-
【Go ハンズオン】 Windows / Linux コマンドを Go で再現 2026 年3
月7 日 GDG on Campus Kyoto University & Kyoto.go 共催 GDG on Campus Kyoto University & Kyoto.go -
今日のゴール Go の開発環境を構築する Go で簡単なプログラムを書けるようになる OS コマンド( ls など)を Go
で再実装してみる 自分で好きなコマンドを作ってみる 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 2 -
質問や感想は X: #kyotogo Discord: Kyoto.go のサーバーにある #2026-03-07-hands-on へ! 質問・相談は @3/7-mentor
にお気軽に 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 3 -
会場提供 株式会社マネーフォワード様 会場提供ありがとうございます・・・・! 【Go ハンズオン】Windows / Linux コマンドを Go で再現
GDG on Campus Kyoto University & Kyoto.go 4 -
コミュニティ紹介 Kyoto.go 京都近郊でGo 言語でワイワイするご当地コミュニティー 1~2 カ月に1 回、オンライン多めにイベントやってます 【Go ハンズオン】Windows /
Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 5 -
コミュニティ紹介 GDG on Campus Kyoto University GDG on Campus (GDGoC)
は 学生同士の学びと専門的な能力開発の 架け橋となることを目指したコミュニティ その中でも京都大学の学生中心で構成される GDGoC Kyoto University は 京大生含む関西圏を中心としたエンジニア同士が交流し、情報交換し、 協力できるネットワークの形成を目的として創設されました。 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 6 -
タイムテーブル 時間 内容 15:00 〜15:30 オープニング・自己紹介 15:30 〜16:30 Go 環境構築
→ Hello World → ls コマンド実装 16:30 〜17:50 自由課題(独自コマンド開発) 17:50 〜18:00 クロージング 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 7 -
自己紹介タイム お名前/ 呼び方 普段やっていること 最近の小話や関心のあるトピック 【Go ハンズオン】Windows / Linux コマンドを
Go で再現 GDG on Campus Kyoto University & Kyoto.go 8 -
ハンズオン開始! AI (ChatGPT, Claude 等)は活用してOK ! ls コマンド実装の章では、写経をお勧めします! 「動いたからOK 」で終わらず、生成されたコードをしっかり読んで理解しよう
学びや発見は Discord で積極的に共有しよう 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 9 -
Go のインストール https://go.dev/doc/install の手順でインストールが確実 パッケージマネージャーを使っている人はそれを使うのも良し winget (Windows), brew (Mac), apt
(Debian 系 Linux) など 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 11 -
動作確認 ターミナルを開いて: go version こんな出力が出れば OK : go version go1.26.0
darwin/arm64 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 12 -
そもそも Go って何?(今更?) Google が開発したオープンソースのプログラミング言語 シンプルな構文、高速なコンパイル、並行/ 並列処理が得意 単一バイナリにコンパイルができ、クロスコンパイルもサポート 配布やデプロイが容易 フォーマッターやLanguage
Server などをはじめ、 開発に必要なツール群も公式がサポート 標準パッケージが超充実 Gopher 可愛い 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 13 -
Go のバージョン管理について Go は後方互換性を重視 → 最新版だけ入っていれば古いコードも大体動く バージョン管理ツールは必要性が薄い 複数バージョンが必要な場合は以下で別バージョンをインストール可能: go install
golang.org/dl/go1.10.7@latest go1.10.7 download 参考: https://go.dev/doc/manage-install 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 14 -
エディタのセットアップ こだわりがなければ VS Code がおすすめ Go Team 公式がサポートしてる拡張機能が強力。無料で使えます。 https://code.visualstudio.com/docs/languages/go 【Go
ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 15 -
プロジェクトの作成 好きな場所にディレクトリを作って、Go モジュールを初期化します。 mkdir kyoto cd kyoto go mod init
kyoto go.mod ファイルが作られます: module kyoto go 1.25.0 // 1.26 の場合一つ前のバージョンになるはず(サポートバージョン) 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 17 -
go.mod とは? Go のモジュール管理ファイル(Node.js の package.json に相当) モジュール名、Go バージョン、依存パッケージを管理 go
mod init <モジュール名> で作成 サードパーティ製モジュールは go get xxx でインストール go.mod に自動追記される ( チェックサムを管理する go.sum も自動で作られる) 参考: https://go.dev/ref/mod 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 18 -
main.go を書く main.go を作成: package main import "fmt" func main()
{ fmt.Println("Hello, World!") } 実行: go run main.go Hello, World! 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 19 -
基本構文のポイント package main — 実行可能プログラムのエントリーポイント import "fmt" — 標準ライブラリの読み込み func
main() — プログラムの開始地点 package main // ← 実行ファイルは必ず main パッケージ import "fmt" // ← 使うパッケージを import func main() { // ← ここから実行が始まる fmt.Println("Hello, World!") } 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 20 -
やること ls コマンドの基本機能を Go で再実装する # 本物の ls ls #
=> main.go go.mod # 自作の ls go run main.go # => main.go go.mod 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 22 -
main.go を書き換える package main import ("fmt"; "os") func main() {
entries, err := os.ReadDir(".") if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } for _, entry := range entries { fmt.Println(entry.Name()) } } 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 23 -
ポイント解説 os.ReadDir(".") — カレントディレクトリのファイル一覧を取得 err — Go ではエラーを戻り値で返す(例外ではない) range —
スライス(配列)をループで回す entry.Name() — ファイル名を取得 entries, err := os.ReadDir(".") // ディレクトリを読む if err != nil { // エラーチェック // ... } for _, entry := range entries { // 一覧をループ fmt.Println(entry.Name()) // ファイル名を表示 } 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 24 -
引数でディレクトリを指定できるようにする func main() { dir := "." if len(os.Args) >
1 { dir = os.Args[1] } entries, err := os.ReadDir(dir) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) } for _, entry := range entries { fmt.Println(entry.Name()) } } 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 25 -
go run main.go /tmp 【Go ハンズオン】Windows / Linux コマンドを Go
で再現 GDG on Campus Kyoto University & Kyoto.go 26 -
バイナリをビルドする 普段書いている .go ファイルは人間が読めるテキスト(ソースコード) go build するとコンピュータが直接実行できる形式(バイナリ)に変換される 生成されたバイナリは Go がインストールされていない環境でもそのまま動く
go build -o kyoto-ls main.go GOOS=windows GOARCH=amd64 go build -o kyoto-ls main.go // OS,CPUアーキテクチャの指定パターン ./kyoto-ls ./kyoto-ls /home ./kyoto-ls /tmp go build で単一バイナリが作られる — 依存なしでどこでも実行可能! 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 27 -
flag パッケージでオプションを追加しよう ls に -a (隠しファイル表示)オプションを追加してみよう showAll := flag.Bool("a", false,
"隠しファイルも表示する") flag.Parse() flag.Bool でフラグを定義 → flag.Parse() で解析 *showAll が true なら隠しファイルも表示 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 28 -
flag パッケージでオプションを追加しよう(続き) for _, entry := range entries { if
!*showAll && strings.HasPrefix(entry.Name(), ".") { continue } fmt.Println(entry.Name()) } go run main.go -a # 隠しファイルも表示 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 29 -
好きなコマンドを作ってみよう! いくつかアイデアを紹介します。簡単なものから挑戦してみてください。 コマンド 難易度 概要 echo ★☆☆ 引数をそのまま出力 cat ★☆☆
ファイルの中身を表示 wc ★★☆ 行数・単語数・バイト数を数える head ★★☆ ファイルの先頭N 行を表示 grep ★★☆ パターンに一致する行を表示 tree ★★★ ディレクトリ構造をツリー表示 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 31 -
よく使うパッケージ: os — ファイル操作、引数、環境変数 fmt — 出力フォーマット strings — 文字列操作
bufio — バッファ付きI/O path/filepath — パス操作 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 32 -
使いたいパッケージの探し方 https://pkg.go.dev pkg.go.dev は Go パッケージの公式ドキュメントサイト 標準ライブラリもサードパーティも検索・閲覧できる 検索バーにパッケージ名やキーワードを入力して検索 【Go ハンズオン】Windows
/ Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 33 -
Go の構文がわからないときは? A Tour of Go を活用しよう! https://go.dev/tour/list Go の基本構文をブラウザ上で対話的に学べる公式チュートリアル
変数、ループ、関数、構造体、インターフェースなど一通りカバー Go Playground で気軽に試せる! https://go.dev/play/ ブラウザだけで Go のコードを書いて即実行できる 環境構築不要、ちょっとした動作確認に便利 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 34 -
go fix コマンド AI が生成するコードは古い API を使っていることがある go fix は古い
API 呼び出しを新しい API に自動変換してくれるツール go fix ./... Go のバージョンアップで非推奨になった関数を自動で書き換え AI に書かせたコードをそのまま使う前に go fix を通すと安心 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 35 -
実装ヒント(1/2 ) os.Args — コマンドライン引数のスライス( [0] はプログラム名) os.ReadFile(path) — ファイルの中身を一括で
[]byte として読み込む os.Open(path) — ファイルを開いて *os.File を返す strings.Join(slice, sep) — 文字列スライスを区切り文字で結合 strings.Contains(s, substr) — 文字列に部分文字列が含まれるか判定 strings.Fields(s) — 空白区切りで文字列を分割(単語分割に便利) 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 36 -
実装ヒント(2/2 ) bufio.NewScanner(reader) — ファイルなどを1 行ずつ読み込むスキャナーを作成 filepath.WalkDir(root, fn) — ディレクトリを再帰的に走査する
flag.Int("name", default, "説明") — コマンドオプション(整数)を定義 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 37 -
コマンド別 おすすめの組み合わせ コマンド 組み合わせ echo os.Args + strings.Join cat os.ReadFile
wc bufio.NewScanner + strings.Fields head bufio.NewScanner + flag grep bufio.NewScanner + strings.Contains tree filepath.WalkDir 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 38 -
参考リンク Go 公式チュートリアル: https://go.dev/tour/list Go 標準ライブラリ: https://pkg.go.dev/std Go Packages: https://pkg.go.dev
困ったらメンターに気軽に聞いてください! 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 39 -
今日やったこと Go の環境を構築した Hello World を動かした ls コマンドを Go で再実装した
自分で好きなコマンドを作ってみた Go のシンプルな構文と強力な標準ライブラリで OS コマンドが簡単に作れることを体験できたはず! 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 41 -
次のステップ A Tour of Go を一通りやってみる https://go.dev/tour/ フラグ処理を追加してみる( flag パッケージ)
テストを書いてみる( go test ) 作ったコマンドを GitHub に公開してみる 【Go ハンズオン】Windows / Linux コマンドを Go で再現 GDG on Campus Kyoto University & Kyoto.go 42