0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Go製2画面ターミナルファイルマネージャー「duofm」を作った話

Posted at

はじめに

ターミナルで作業していると、ファイル操作のために別のウィンドウを開くのが面倒に感じることがあります
そこで、Go言語でデュアルペイン型のファイルマネージャー「duofm」を開発しました

duofmとは

duofm - Unifies Orthodox File Manipulation は、ターミナル上で動作するデュアルペイン型ファイルマネージャーです
Midnight Commanderやだいなファイラーなどのファイルマネージャーにインスパイアされ、vim風のキーバインドで操作できます

image.png

主な機能

デュアルペインインターフェース

2つのディレクトリを並べて表示し、ペイン間でのコピーや移動が簡単に行えます。

主要キーバインド

キー 動作
h j k l 移動・ペイン切り替え
c コピー
m 移動
d 削除
/ インクリメンタル検索
? ヘルプ表示

豊富なファイル操作

  • ファイル/ディレクトリのコピー・移動・削除・リネーム
  • パーミッション変更(chmod)
  • アーカイブの作成・展開(tar, zip, 7zなど)
  • 複数ファイルのマーク選択による一括操作

ナビゲーション機能

  • ディレクトリ履歴(ブラウザのような戻る/進む)
  • ブックマーク機能
  • 隠しファイルの表示切り替え
  • ソート切り替え(名前/サイズ/日付)

外部ツール連携

  • $PAGERでファイル閲覧
  • $EDITORでファイル編集
  • !キーでシェルコマンド実行

インストール方法

# リポジトリのクローン
git clone https://github.com/m-m-n/duofm.git
cd duofm

# ビルド
make build

# 実行
./duofm

# または、$GOPATH/binにインストール
make install

# Debian系ディストリビューションはGitHubに置いてあるdebパッケージをインストールする
sudo apt install -y ./duofm_1.0.0_amd64.deb

基本的な使い方

duofm

よく使う操作

  1. ペイン間でファイルをコピー: ファイルを選択して c
  2. 複数ファイルを選択: Spaceでマーク → cで一括操作
  3. 検索: /を押して文字を入力
  4. コンテキストメニュー: @を押して操作を選択
  5. 困ったら: ?でヘルプを表示

開発手法

今回は実験的な意味合いも込め、すべてClaude Codeで作成しました

技術スタック

要素 採用技術
言語 Go 1.21+
TUIフレームワーク Bubble Tea
スタイリング Lip Gloss
テスト Go標準testingパッケージ

Bubble TeaはElmアーキテクチャに基づいたTUIフレームワークで、状態管理が明確で複雑なUIも構築しやすいのが特徴です

仕様駆動開発(Specification-Driven Development)

duofmでは**SSOT(Single Source of Truth)**の原則に基づき、仕様書を開発の中心に置いています

ドキュメント構造

doc/
├── specification/
│   └── SPEC.md              # プロジェクト全体の仕様
├── tasks/
│   ├── archive/
│   │   └── SPEC.md          # アーカイブ機能の仕様
│   ├── bookmark/
│   │   └── SPEC.md          # ブックマーク機能の仕様
│   └── ...                  # 各機能ごとの仕様
└── CONTRIBUTING.md

開発フロー

変更の流れは常に仕様 → 実装計画 → コードの一方向です

1. Specification Phase(仕様策定)
   └─ SPEC.md作成・レビュー

2. Planning Phase(計画)
   └─ IMPLEMENTATION.md作成

3. Implementation Phase(実装)
   └─ コード実装・テスト作成

4. Review Phase(レビュー)
   └─ 仕様との整合性確認

5. Integration Phase(統合)
   └─ mainブランチへマージ

実装中に問題が見つかった場合は、まず仕様を更新してから計画・コードを修正します

仕様書の内容

機能仕様書(SPEC.md)には以下を含めます:

  • 概要・目的: 何を実現するか
  • ドメインルール: ビジネス制約(最重要)
  • ユーザーストーリー: 誰が何をしたいか
  • 機能要件: FR1.1, FR1.2... と番号付け
  • 非機能要件: パフォーマンス、セキュリティ等
  • テストシナリオ: 検証すべきケース
  • 成功基準: 完了の定義

含めないもの: 実装コード、ファイル構造、アーキテクチャ詳細(これらはIMPLEMENTATION.mdへ)

コード品質の維持

# フォーマット
make fmt

# 静的解析
make vet

# テスト実行
make test

# カバレッジ付きテスト
make test-coverage

Conventional Commits

コミットメッセージはConventional Commits形式を採用:

feat: add dual pane navigation
fix: correct file copy error handling
docs: update SPEC.md with cache strategy
test: add tests for file operations
refactor: simplify UI rendering logic

まとめ

duofmは、ターミナルでの作業効率を上げるためのツールとして開発しています
昨今話題のAI駆動開発とやらを試すべく、フルClaude Code生成で実装しました
開発開始から20日弱で一旦一通り必要と思える実装を完了することができました
まず自分が必要な機能から実装したので、もし使ってみてご意見があれば教えてください!


それでは良いduofmライフを

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?