2023年 8月にこのブログをWordPressに移行してから、どこでどう記事を書いたり、サイトを編集したらいいんだっていうことに、悩んできました。

Hugo関連のファイルは全てGitで管理しているので、Gitクライアントとエディタさえあれば、最低限の作業はできます。

しかしできれば、ローカル環境でHugoを動かして、どんな感じになるのかを確認してからコミットしたいんですよ。

2023年現在所持しているのは、iPad Pro 12.9 M2と、ThinkPad X280。そりゃThinkPadを持って外出したら、なんだってできます。でも僕は外出先にはiPadしか持って行かないようにしたいんです。

一応、自宅のIPアドレスにドメインを割り当てているので、そこにアクセスしながら作業ということもできなくはありません。しかしそれではネット環境が整っていないとリモートで繋ぐことすらできなくなります。

できればローカル環境でHugoを触りたい。ずっとそう思っていました。

一応アプリでは選択肢があってiSHというアプリが裏でx86の仮想マシンが動いているっぽいターミナルアプリがあります。なかなかの神アプリですが、それでもHugoのような大きなプログラムを動かそうとすると、ランタイムエラーをよく吐きます。とても現実的ではありません。

何かないかなと思って探してみたら、Raspberry PiをUSBでiPadに接続することで、TCP/IPの通信を行う方法を発見しました。

今回は設定方法からHugoを動かすところまでを、まとめたいと思います。

Raspberry Pi側で行う設定

まず、そもそもどういう仕組みで実現するかというと、ラズパイのUSB端子をUSB Ethernet/RNDIS Gadgetとして認識させるように設定します。

iPadとラズパイが同一ネットワーク内にいる環境を作るわけです。iPadに有線LANアダプタでも繋いで、ラズパイのNICとクロスケーブルで接続しているのと実質変わりません。

USB Ethernet/RNDIS Gadgetの何が良いかというと、接続がスマートになります。

対応している機種は

  • Raspberry Pi Zero系
  • Raspberry Pi 4

です。初代〜3までの独立したUSB端子では動かないようです。4が対応しているのはUSB-Cが電源供給だけじゃなくてホストにも対応しているからだと思います。

これら対応しているラズパイを、iPadのUSB-C端子に繋ぐと、ラズパイ本体の電源をiPadからもらって起動しながらEthernetで接続できるわけです。めちゃくちゃスマートです。

その代わりiPadのバッテリーがゴリゴリ減りますけどね。

2つの設定ファイルを編集する

ラズパイのOSが書き込んであるmicroSDカードの中にある、config.txtとcmdline.txtを編集します。

既に同一ネットワーク内にあったり、直接触れる環境にあるなら、/bootの中にあります。カードリーダーでmicroSDカードを読み込むと、直接編集もできます。

/boot/config.txtに追記

dtoverlay=dwc2

/boot/cmdline.txtのrootwaitの後に追記

modules-load=dwc2,g_ether

この2つのファイルにそれぞれを追記して再起動。その後にifconfigしてみるとusb0というインターフェイスが追加されていると思います。

この状態でiPadとラズパイを接続してみると、自動プライベートIPアドレスが勝手に割り振られているホスト同士で通信できる環境が整います。

こっちがラズパイでifconfigした画像。

そしてこっちがiPadの設定画面です。

どっちかにDHCPサーバがいるわけじゃないので、勝手に自動でプライベートIPを振った結果同一セグメント内にいて、通信が成り立つわけです。

Raspberry Pi OSのインストール後に繋ぐなら

もしも、ラズパイに画面やキーボードなどを接続して設定するのではなく、ラズパイOSのimgを流し込んでから、そのままこの手法で接続するだけで初期設定を完結させたいなら、

OSをmicroSDカードに書き込む際にSSHの設定やユーザの作成をしておく必要があります。

そのあたりは参考になるサイトが既にあるので、PCとSDカードリーダだけでOSのインストールを完結させたいなら参照されると良いと思います。

SDカードリーダーだけでRaspberry PiのインストールとSSH接続をする

外出先からアクセスできるファイルサーバーが追加で欲しくなったので、小型かつ安価で導入できるRaspberry Pi 4(以下ラズパイ)を購入しました。今回は、SDカードにWifiやSSH接続を可能にする設定ファイルを作成して、起動後にSSH接続ができる状態にしていこうと思います。

Hugoのインストール&起動

iPadにラズパイを接続して、その電力でOSが起動してきたら、iPad向けのターミナル系アプリを使ってSSH接続します。

有料アプリから無料アプリまで様々ですが、僕は「a-Shell」を愛用しています。

a-Shell
無料
(2023.08.22時点)
posted with ポチレバ

ちなみに、ラズパイOSが起動したかどうかは、本体のLEDを見ていてもわかるかもしれませんが、iPadの設定からEthernetの設定を見てもらうと判断できます。

自動プライベートIPが表示されたらラズパイが起動したという合図です。

あとはラズパイにSSH接続するわけですが、iPad側のIPアドレスがわかっても、ラズパイ側のIPアドレスがこのままではわかりません。

今回の手法を紹介しているサイトによりけりですが、僕はホスト名で接続したいと思ったので、特にIPアドレスを調べようとはしませんでした。だってその方が楽だし。

ラズパイのホスト名はデフォルトでは「raspberrypi.local」です。それかOSインストール時に設定項目より変更できます。できれば変更した方が良いですね。

というわけで、a-Shellなどのターミナルから、SSH接続がこれでできるようになります。

$ssh username@raspberrypi.local

これだけ。

あとはラズパイにHugoをインストールしていきます。

$sudo apt-get install Hugo

これだと最新ビルドが入ってこないので、arm64向けのdebパッケージを自分でダウンロードしてインストールしても良いかなと思います。

wget https://github.com/gohugoio/hugo/releases/download/v0.117.0/hugo_extended_0.117.0_linux-arm64.deb
dpkg -i hugo_extended_0.117.0_linux-arm64.deb

※最新バージョンが0.117.0だった場合のコマンド例

あとは適当にサイトでも作って

$hugo new site testsite

そのまま作成されたディレクトリに移動して、サーバーモードでHugoを立ち上げます。でもそのままだとlocalhostからしかアクセスができないので、bindオプションをつけます。

$hugo server -D --bind 0.0.0.0

これでも動きますが、ちゃんとホスト名を指定するなら、こっちでも良いかも。

$hugo server -D --bind raspberrypi.local --baseURL="http://raspberrypi.local"

で、サーバーが起動したらiPadのSafariからラズパイのホスト名に1313番のポート番号を指定してアクセスします。

http://raspberrypi.local:1313

Hugoコマンドで作ったばかりのサイトなので中身は空ですが、curlコマンドでURLを叩いたらpreタグを返してきましたし、Safariからアクセスしたらエラーではなく真っ白なページが表示されたので、これで正常です。

これでiPadとラズパイでのP2Pな関係のネットワークはあるものの、ケーブル1本で繋がっているだけなので、かなりローカルに近い環境で、iPadからHugoが触れるようになりました。

また、ラズパイにVNC接続すれば、iPadから普通にGNOMEなども触れるので、開発環境がかなり良い感じに構築できるんじゃないかと思います。

USB OTG(On The Go)の活用事例

今回のこの手法、実は結構有名らしい。

USB On The Go、略してUSB OTGというらしいです。

USB On-The-Go - Wikipedia

つまり、ラズパイのUSB端子を通して、特定のUSB機器としての役割を持たせるっていう機能です。

特にEthernetとして機能させるUSB Gadget Driverの主な目的が、NICを持たないLinuxコンピュータをPCに接続した時に、ホストが接続しているインターネット回線に接続するためだとか。

USB On-The-Go - Wikipedia

今回調べてみて、この方法を知ることができて、これからのiPadの活用が、自分の望む形で広がりそうです。iPadとラズパイが繋がって、シェルがいつでも触れて、心がぴょんぴょんします。

今回の記事を書くにあたり、参考にしたサイトはこちらです。

Raspberry Pi の USB Ethernet/RNDIS Gadget で 固定 IP アドレスを使う(その1) - HackMD

###### tags: `raspberrypi` # Raspberry Pi の USB Ethernet/RNDIS Gadget で 固定 IP アドレスを使う(その1) ## USB

USB 1本とSDカードライタだけでできるUSB OTGを用いたRapsberry Pi Zero WH のセットアップ - Qiita

以下,Raspberry Pi Zeroと書くのは長いため,RPZと省略する場合があります.Macの場合とWindowsの場合両方に対応しています1. Raspberry Pi Zero のセッ…

HugoをLAN上のiPhoneからプレビューする方法 - Qiita

手順Step1. IPアドレス確認まずはMacのIPアドレスを確認する.ifconfigでeth0を見るか,設定アプリ>ネットワークから確認する.Step2. Hugo server 起動…

iPad Pro 2018での開発環境の構築 - Qiita

前書き @willsmileです.Qiitaの初投稿のため,簡単に自分について語ります.本業はEduTech企業のエンジニアですが,院生時代,教育関係(学習科学/教育工学)に関する研究を経験し,人…

似たような環境で開発環境を構築されている方も発見しました。趣味が合いそうです。