スマホをリモート Git クライアントとして使う
差分をレビューし、行単位でコメントし、コミットしてプッシュするまでをスマホから行うワークフロー。リポジトリは信頼できるパソコンに置いたままです。
- CLI
- 0.2.17
- プレビュー ref
- a2c45c8
目標ははっきりしています。
- リポジトリはパソコンに置いたまま
- 変更はスマホからレビューできる
- 判断できる(残す / 戻す / コメント / コミット)
- 自信があればプッシュできる
「スマホで開発する」のが楽しいからではありません。
Git の難しいところは、コードを書くことではないからです。
キーボードから離れているのに、次の問いに答えなければならないときです。
「この変更で大丈夫?」
このガイドでは、リモートでの Git レビューをわかりやすく繰り返せるものにするワークフローを紹介します。
根本的なトレードオフ
リモートでの Git のワークフローは、必ず次のどれかのコストを払います。
- ファイルシステムをマウントする(SSH マウント、iOS のファイルプロバイダーなど)
- UI にリモートで入る(リモートデスクトップ)
- ターミナルで Git を使う(SSH/tmux)
- リポジトリのコピーをスマホに置く(本物のモバイル Git クライアント)
どれも使えます。
でも、実際の使い心地はかなり違います。
よくある方法とトレードオフ
- スマホからの SSH: 使えますが、小さなターミナルで長い出力をスクロールするのはつらいです。
- リモートデスクトップ: 重くて操作が面倒です。非常時には問題ありませんが、既定にするには向きません。
- ローカルにクローンするモバイル Git クライアント: これも使えます。「iPad 中心の開発」なら良い選択になりえます。 よく知られた例が Working Copy(iOS 上の Git)です。しっかりしたアプリです。 ただ、パソコンが正となる情報源で、すでにリポジトリとツールがあるなら合いません。
役立つのは、もっと軽いループです。リポジトリをスマホに移さずに、差分をレビューし、コメントを残し、コミットし、プッシュします。
動くワークフロー
このワークフローでは、リポジトリを持つパソコンに対してリモート UI を使います。
Happier は、この方法に対応する選択肢の1つです。
Happier のセッションはどれもパソコン上のフォルダに紐づいています。スマホでは、セッションがそのフォルダ専用の ファイル(Files)タブと Git タブを持つので、リポジトリのコピーをスマホに置かずに、変更ファイル、差分、コミット、履歴を扱えます。
Git の書き込み操作(ステージ、コミット、プル、プッシュ)は実験的で、既定ではオフです。設定(Settings)→ 機能(Features)→ バージョン管理操作(Source control operations) でオンにします(Git のドキュメント(英語)を参照)。状態、差分、履歴の確認は、これがなくても使えます。
トレードオフ: パソコンがオンラインであることが前提です。
Happier を初めて使う場合(概要と入手方法)
Happier を初めて見る方へ。Happier はオープンソースのコンパニオンアプリ(モバイル/Web/デスクトップ)で、コーディングのワークフローは信頼できるパソコンに置いたまま、スマホから管理できます。
セットアップ:
- スマホから Happier を使う方法
- GitHub: https://github.com/happier-dev/happier
- インストール/ダウンロード: https://github.com/happier-dev/happier#how-it-works
- Discord(コミュニティとサポート): https://discord.gg/W6Pb8KuHfg
手順: スマホをリモート Git クライアントとして使う
1) リポジトリのフォルダでセッションを開く
リポジトリで動いているセッションを開くか、新しいセッションを始めて、作業ディレクトリとしてパソコン上のリポジトリのフォルダを選びます。
2) Git タブを開く
セッションの中で Git タブを開き、変更されたファイルから始めます。
ここで実用的なものが3つ手に入ります。
- 変更ファイルの一覧
- 差分をレビューする画面
- コミットする画面(0.2.12 以降、コミットするファイルを正確に選べる)
3) 差分をレビューする(全部を読み直さずに)
変更されたファイル(Changed files)では、次が表示されます。
- 変更されたファイル(件数付き)
- ↓ レビュー(↓ Review)ボタン
↓ レビュー をタップします。
リポジトリが大きいと、次のように表示されることがあります。
- 大きな差分を検出しました(Large diff detected)
これはバグではありません。ガードレールです。スマホで 600 個のファイルを一度に描画しようとせず、差分を少しずつ読み込みます。
スマホでの実際のレビューループ
スマホでは、完璧なレビューをしようとしないこと。
範囲を決めて1回だけ見ます。
- リスクの高そうなファイルを先に開く。
- 決める: 残す / 戻す / コメント。
- やめる。
ミスの多くは、レビューが終わらなくなったときに起きます。
4) レビューコメントで変更をピンポイントにする
多くのツールがうまく扱えない部分です。
スマホでレビューしているとき、次のような長いメッセージは書きたくありません。
「差分のあの部分を直してください。」
代わりに、差分に行単位のレビューコメントを残します。
すると、次に紐づいた文字どおりのチェックリストができます。
- ファイルパス
- 行
- 周辺のコードの抜粋
後でやる作業を「キューに入れておく」のにも便利です。
5) コミットする(自信があるとき)
変更されたファイル の下部には、次が表示されます。
- コミットの選択の概要(例: 0 files selected for the next commit.)
- すべて(All)ボタン
- コミットメッセージ(Commit message)欄
- コミット(Commit)ボタン
役立つ小さな習慣:
- 既定で全部をコミットしない
- まとまりのある最小限のファイルを選ぶ
- 意図を説明するわかりやすいコミットメッセージを書く
UI が次のようなことを伝えてきたら:
- Operation requires a clean working tree.(作業ツリーがクリーンである必要があります)
文字どおりに受け取りましょう。
このメッセージは「リポジトリがクリーンであることを前提にした操作を実行しようとしている」と伝えています。
6) プル / プッシュ(上流と同期する)
Git タブには、次の操作があります。
- プル(Pull)
- プッシュ(Push)
スマホからリモートで Git を使うなら、ここは慎重にいきたいところです。
良いルール:
- プル は気軽に。
- プッシュ は差分をレビューして自信が持ててから。
7) コンテキストが必要なら履歴を使う
「今何が変わった?」ではなく「何が起きた?」に答えたいなら、次を開きます。
- Git タブのコミット履歴
スマホでリポジトリをレビューしていて、昨日何をしていたか忘れたときに特に便利です。
ターミナル(任意、10% のケース向け)
ターミナルが必要なときもあります。
埋め込みターミナルが使える場合、セッションに ターミナル(Terminal)タブが表示されます。機能一覧(英語)によると実験的な機能です。
強くおすすめすること:
- ふだんのワークフローは UI 中心にする(差分、履歴、コミット)
- ターミナルは、本当に必要なまれなケースだけに使う
何でもターミナルでやるなら、ボタンがきれいになっただけの「スマホで SSH」に戻ってしまいます。
よくある質問
これは「スマホ上の Git」?それとも「スマホからパソコン上の Git」?
後者です。
リポジトリはパソコンに置いたままです。
スマホは、レビューと操作のための画面です。
よくある大きな失敗は?
ホストのパソコンがオフラインになることです(スリープ、ふたを閉じる、ネットワークの変化)。
どんなリモート Git クライアントも、物理的な制約は直せません。
できるのは、「オンラインか?」をはっきりさせ、変更が黙って中途半端に適用されるワークフローを避けることです。
代わりに本物のモバイル Git クライアントを使うべきなのはいつですか?
本当にリポジトリを iPhone/iPad に置きたいなら(オフラインでの作業、旅行、iPad 中心の開発)、本物のモバイル Git クライアントを使いましょう。
Working Copy のようなツールには、存在する理由があります。
このガイドは、「パソコンにリポジトリがあって、リモートでのレビューと小さな介入だけしたい」場合のためのものです。