2019年末版：Chromebookを開発に使う

[PySpaアドベントカレンダー](https://adventar.org/calendars/3896)のエントリーです。昨日はYesterdayでした。今日はTodayです。

ずっと開発や普段使いで使えるChromebookが欲しいと思っていました。勉強会の発表で使ったりするので、きちんと技適が通ったやつで、性能がまとも（以前ATOMベースのマシンにLinux入れたけど遅くて使う気になれなかったので）なやつを待ち望んでいました。

7月ぐらいからHPがChromebookを販売開始してくれました。気づいてから申し込んだものの、予想外に受注があったのか、納期が伸びに伸びて1ヶ月半近くかかりましたが、とても良いものだったので、今ではすっかりメインで使っています。

バージョンによって状況はまた変わってくるかもしれないので、タイトルに日時を入れました。これを書いた時点でのバージョンは78.0.3904.106（Official Build）（64 ビット）でした。

# 日本のChromeOS機の状況

アメリカとイギリスではGoogleがフラグシップ機のPixelbookおよびPixelbook Goを販売しています。Core i5やi7も選べ (Pixelbookは7th Gen、Goは8th GenのUライン)、メモリも8GB/16GB、ストレージも256GBとか512GBも選べちゃう感じで、とても良さそうです。

日本はというと、ARMだったり、ATOMのCeleronだったりのマシンばかりです。メインメモリも2GBだったりとか、そんなレベルです。その分お値段も安くて今どきのスマホの半額ぐらいだったりするのですが、開発環境にするには貧弱です。

そんな中、HPが立て続けに3機種販売開始しました。

* [Chromebook x360 14](https://jp.ext.hp.com/notebooks/personal/chromebook_x360_14/)
* [Chromebook x2](https://jp.ext.hp.com/notebooks/personal/chromebook_x2/)
* [Chromebook x360 12b](https://jp.ext.hp.com/notebooks/personal/chromebook_x360_12b/
)

このうち、x2とx360 12bはYラインのCore CPUだったりなので省電力でローパワーですが、x360 14はTDP 15Wクラスの一般的なノートPC程度の性能のある8th Gen Core i3/5を搭載しています。8th GenはCore i5でも物理4コア、論理8コアで、それまでのCore i7相当になっています。

ストレージは少なく64GBですが、メモリは8GBです。メモリとCPUに厳しい最近のWebフロントエンド開発には厳しいかもしれませんが、個人開発のGoなら余裕の性能です。速攻でi5の方を購入しました。買ったときの価格は73000円でした。セールしていたときの最低価格は55000円ぐらいです。買ったときは英語キーボードのみでしたが、今は日本語キーボードも選べます。

なお、Acerにはトップページから辿れない謎の[Spin 13](https://www.acer.com/ac/ja/JP/content/acer-chromebook-spin-13)が検索ではひっかかって、[日本のAmazonでも買えたり](https://amzn.to/2YNDtKS)します。解像度は高いし、本国だとCore i7があったり、メモリ16GBでストレージが128GBもあったりしてこちらも魅力的です。

# 最近のChromeOS

以前のChromeOSはブラウザがあるのみで、あとはChrome Extensionである機能でがんばるという感じでした。

近年はAndroidアプリが利用できるようになりました。以前から開発者モードにすればLinuxが使えましたが、今では吊るしで買ってきた状態でオプションを有効にするだけでLinuxが使えるようになります。

今の時代、WindowsでもWSLでLinuxが使えますし、macOSもUNIX系のツールは備えているので、わざわざChromeOSである必要性も薄まっては来ていますが、I/Oが遅いWSLでもなく、仮想化を使わずにDockerが走るLinux機です。自分でLinuxを入れてもいいんですが、電源周りも含めてきちんとしているマシンがいいな、ということでLinuxプリインストールのChromebookはいいんじゃないかと。

購入直後のバージョンアップで仮想デスクトップも使えるようになりました。`🔎 + [`と`🔎 + ]`で切り替えです。

# Linux

設定でLinux(ベータ版)と書かれた項目を選んで有効にすれば使えるようになります。かんたんですね。

![Screenshot 2019-11-27 at 22.39.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6105/b1a7b12e-c6a9-9c00-a8dd-2ba264ed12cb.png)

ターミナルを開くことができるので、これで普段の開発はたいていなんとかなりそうです。LinuxはDebian 9.1のようです。ターミナルウインドウは~~複数開いたり~~タブを出したりといったことはできないので、tmuxをインストールして、.bash_profileの最後でtmuxを起動するようにしました。

なお、Linuxモードの注意点としては、OSに最初から入っている日本語入力が使えない点です。正確にはIME切り替えが効かない。ChromeのブラウザとAndroidアプリでは使えるのですが、ターミナル上でも、Linuxアプリケーション（VSCodeとかGoLandとか）の上では切り替えができません。ついでにいうと、PWAの画面でも動作しません。

ChromeOSのユーザーのブログとかを見ると、ChromeOSとは別にLinux用のIMEを入れることで回避している人がいるようですが、僕はGoを書くときは日本語を入れられなくても問題ないので、そのまま使うことにしました。たまーに入れたいだけなら、ブラウザ等で入力してコピペで済みますし。Issueには上がっているようですので、そのうち治るといいな。

**12/31追記** Ctrl+Shift+Nで複数ウインドウを開くことができました。前からそうだったのかはわかりません。

# 入れているアプリケーション

## Slack

SlackはAndroidアプリ版を入れました。特に困っていることはありません。普通に動きます。

初回起動時は縦長のスマホっぽい画面が出て、むむっと思いましたが、ウインドウをリサイズして横長に広げれば、macとかのアプリと同じような見た目になります。

## Kindle

こちらもAndroidアプリ版。タッチも使えるし、なんの問題もなく使えます。

## Sphinxの本の執筆環境

本の原稿を書くためにSphinx環境を作りました。最初Visual Studio Codeを入れてみたのですが、日本語入力の切り替えは致命的だったので、[CodeServer](https://coder.com/)にしました。VSCodeをサーバーで動かし、UIはブラウザでいいよ、というやつです。Docker版もあり、それはそれで動作はしますが、次のGo開発のことを考えてLinux版のバイナリをターミナルで直接動かして使っています。

**12/21追記**

OSを79にアップデートしたせいか、--host 127.0.0.1を付与しないとブラウザから見えなくなりました。Linuxの上で動いているシステムでlocalhostで起動しているものは外からは見えません。Dockerで言うところの--network hostだったのが--network bridgeにでもなった感じでしょうかね。

```console
$ ./code-server --auth none --host 127.0.0.1
info  Server listening on http://127.0.0.1:8080
info    - No authentication
info    - Not serving HTTPS
```

**3/15追記**

**localhostは、penguin.linux.testという名前で引けるようになったようです。上記の対応をしなくても、 http://penguin.linux.test:8080 でアクセスできます。逆に、--host 127.0.0.1を設定すると、このドメインではアクセスできません。**

https://www.reddit.com/r/Crostini/comments/8icbz9/testing_my_websites_using_localhost/e4ca6m2/

あとは8080ポートにChromeでアクセスすればOK。ブラウザなので日本語入力も完璧です。

![Screenshot 2019-11-27 at 23.10.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6105/624067d0-2a24-b259-8236-ea41950c4487.png)

Sphinxは（たぶん最初から入っていた）Python 3.5を使って動かしています。書籍開発用のフォルダをvenvで使いその中でSphinxをインストールします。Real World HTTPのリポジトリはblockdiagを使っていて、pillowとかも利用していたりしますが、問題なく動作しました。

```console
$ sudo apt install python3.5-venv
$ python3 -m venv book
$ cd book
$ source bin/activate
$ pip install sphinx
```

これで、執筆からビルドしてレビューするまですべて動作しました。今はTexは入れてないけどそのうち入れてみよう。

## Go開発環境

Goの処理系は特に苦労なくインストールできます。会社で使っている2015 MacBookProのCore i7機と比べるとgo testが半分の時間で終了したので（ESTAの影響はわからないですが）パフォーマンスも良さそうです。また、普通にamd64なLinuxなので、クロスコンパイルとかしなくても、go buildでそのままLambdaにアップロードしたら動くのは面白いですね。

コード入力の方法はいくつか選択肢がありますが、↑で使ったCodeServerを当初使っていました。Docker版だとあとからインストールされるツールからローカルのGOPATHのコードを見てくれなくて補完とかうまくいかなかったので、Linux版をターミナルで実行していました。ms-vscode.goのGo拡張で問題なかったのですが、いつのころからかmomentのモジュールがimportできないというエラーが出て補完ができなくなってしまいました。

GoLandをその後入れてみて、当初は軽快に動作していたのですが、しばらく使っているとかなりパフォーマンスが遅く。メモリは余っているのにタイピングに対する応答が良くないという状況です。これは普段仕事で使っているMacBookProもまあ似た感じではありましたが、GOPATH内のコードを全部インデックス化する、というのを外したところ多少ましになりました。

まあそんな感じでGoLandを使っています。設定としてはフォントサイズを少し大きくしたぐらいですね。

ちなみに、次のようなファイルを作っておくと、ChromeOSのランチャーにアイコンを追加できます。ランチャーにあるということは、Dockのバーにも置けるのでいつでも気軽に起動できます。

```ini:~/.local/share/applications/GoLand.desktop
[Desktop Entry]
Type=Application
Terminal=false
Exec=/bin/sh /home/yoshiki/GoLand-2019.2.1/bin/goland.sh
Name=GoLand
Icon=/home/yoshiki/GoLand-2019.2.1/bin/goland.png
```

このあたりはChromebookのローカルで完結するように環境を作りましたが、当然[Cloud9](https://aws.amazon.com/jp/cloud9/)やら、先月発表された[Visual Studio Online](https://azure.microsoft.com/ja-jp/pricing/details/visual-studio-online/)でも良いかと思います。

## Docker

何事もなく動作します。[ここに書いてある](https://docs.docker.com/install/linux/docker-ce/debian/)ように、sudoがいらないようにdockerグループを作ってごにょごにょしたぐらいですね。

とはいえ、64GBモデルで空きのディスクスペースは40GBちょっとしかないので、docker buildをガンガンやるような使い方は合わないと思います。ローカルで開発に必要なPostgreSQLとかNATSとかのミドルウェアを手早く入れて実行するという用途に限定するのがいいんじゃないですかね。

まあ、僕も最近はDockerfileのサイズとビルド時間を競うeスポーツにつかれてしまったので、bazelでもやろうかな、という気持ちではあります。そうなると履歴とかなくなってストレージ使用量も減るのではないかと。DockerやるならAWSとかGCPにログインしてやるとか、NUCあたりを自宅に置いて、Dockerをそこで走らせてリモートビルドやりたいですね。

# 不具合？

日本語入力がLinuxアプリやターミナル上で動かない点についてはすでに説明しました。

あとは、Androidアプリのうち、ゲーム系のアプリはなぜか初回起動はうまくいくのに、次に起動すると画面が真っ白で進まない、という感じです。まあゲームやらないのでいいんですが・・・けものフレンズ3・・・

# 使ってみての感想

7月以降、趣味コードとか本とかは全部まるごとChromebookでやっています。自宅ではすっかりMacBook Proは開かなくなりました。どうせ、本を書くにしても、コードを書くにしても、自分の脳みそがボトルネックで30万円のMacBook Proを買ってもスループットは変わらないのは確認しているので、7万円台で買えたのは良かったです。浮いたお金でセラミックベアリングと新品のMatterのウィールも買えて、次はカーボンフレームでも買おうかな、と。

明日はd1ce_さんです。