Chromebookでのプログラミングを完全に理解した

![Screenshot 2020-12-03 at 11.51.55 PM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55873/e2263a0b-a598-1bce-cfda-52ce79efea2f.png)

## はじめに
こんにちは。「すば」と申します

この記事は[「完全に理解したTalk Advent Calendar 2020」](https://qiita.com/advent-calendar/2020/easyeasy)4日目の投稿記事です。

今回は、うっかりChromebookプログラミングの全てを理解してしまったので（本当か？）みなさんにご紹介したいと思います。

## なぜChromebookでプログラミング？ vs PC
そもそも普通にPCでプログラミングしたほうがいいじゃん、と思われる方もいらっしゃると思います。~~（僕もそう思います）~~

Chromebookでやる大きなメリットとして、簡単にLinux環境が作れることです。
なんとクリック数回でできてしまいます。

Linuxの操作はITエンジニアにとっては必須と呼べるものですので、それが簡単に学習できる環境は魅力的です。
（変なことをしてしまったときは、簡単に初期化もできます。）

また、安価で軽くタッチパネルも備わっているので、カフェでプログラミングして、~~飽きたらYoutubeとかゲーム~~も簡単にできて捗ります。

kindleも読めるのが地味に便利。

## なぜChromebookでプログラミング？ vs iPad
でもiPadのほうが画面きれいだよね？と思う方がいらっしゃると思います。~~（僕もそう思います）~~

ただ、iPadは手軽に使えるLinux環境というのはありません。

VPSでサーバーを借りて、そこにSSHで接続という形になると思いますが、回線が不安定なときだと何もできないということがあったりします。（実際にあって結構辛かった）

ChromebookはローカルにLinux環境を構築できるので、安定感が段違いです。

~~あと、iPad Proだとキーボードつけると重いし、全体的に高いし~~

## Chromebookの種類
大雑把に言うと、2種類に分かれます

* CPUがx86_64のハイスペックChromebook（6万円くらいからが目安）
* CPUがArmで持ち運び重視なコスパChromebook（5万円が目安）

プログラミングは、x86_64のCPUを前提とした環境が多いので、こちらのほうが自由度は高いですが、軽さとスペックを両立させようとするとちょっとお高いです。（1kg前後は10万円くらいが目安）

ただし、Armもいいところがあって、消費電力が少なくてスマホの充電器で十分動くとか、タブレットとしても使いやすいので、外出時に持ち運びやすいなど、サブマシンとしては十分だと思います。安いしね。~~（Elmが動かないのだけが辛い）~~

## 環境
今回は以下の環境での説明となります

マシン名：Lenovo Chromebook Duet
CPU：Arm
メモリ：4GB
Linux: Debian 10（標準）
言語設定：英語

軽くてタブレットにもなるので、自分的に結構好きです。

## セットアップ
![Screenshot 2020-12-04 at 12.30.48 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55873/d0dd07ae-15aa-cd22-d6a3-d5e443a928d2.png)

設定を開くと上記のように*Linux(Beta)*という項目がある。
クリックすると、有効化する旨のボタンがあるので、今度は、そこをクリック。
出てきたダイアログを次へで進んでいくと設定完了

アプリ一覧に`Terminal`というアイコンが増えているはず。

~~詳しくはググってほしい~~

## Terminal Emulator
標準のTerminalを使用します。

後述のパッケージマネージャーから`gnome terminal`等も入れることができますが、標準のターミナルの方が安定して使える感がありました。

また、Linux内にインストールしたGUIアプリの場合、Linux内で更に日本語入力設定を行わないといけなくて大変なので、基本的に標準のTerminal内で完結させると楽です。

標準のTerminalではChromeOSが日本語入力の制御をしてくれます。

あと細かい話ですが、Linux内でWebサーバーをPort 8080で起動したするとします。
そこに、Chromeからアクセスしようとすると、`100.115.92.202:8080`というアドレスにアクセスしなくてはいけません。これはChromebookのLinuxの実態は、実はVMなので、そのIPアドレスにアクセスしないといけないからです。
ただし、標準のTerminalだと、自動で`localhost:8080`でアクセスしても大丈夫なようにしてくれます。

## パッケージマネージャー
Debianなので、`apt`が使えます。

また、パッケージが足りない場合は、以下の２つを追加で使ってみると大体の新しいパッケージは網羅できます。

* [nix-shell](https://nixos.org/download.html)(リンク先にインストール方法あり)
* [snap](https://snapcraft.io/)([インストール方法](https://snapcraft.io/docs/installing-snap-on-debian))

ただし、動かない場合もあるので注意。

自分の場合は、nix-shellで入れたneovimが設定ファイルを読み込んでくれなかったが、snapの方でインストールしたら動いたとかあったり。

他にもhomebrewがあるんですが、armだと使えないです。

## エディタ
Armでも使えるメジャーなエディタは以下のものがあります

* VSCode
* Vim/NeoVim
* Emacs

`AndroidStudio`とかはx86_64じゃないと動かないです。

自分は軽さ重視で、NeoVimとEmacを使っています。

## 言語
見た感じ大体動きます
`Nodejs`とか余裕ー。
`Python`とか`Ruby`はもちろんですし、
`dotnet`と`java`も動きました。

ただ、`Rust`とかのコンパイルが必要な言語で、開発用ツールのバイナリがArm用のがないとか、そういうパターンとかはありそうです。（`Rust`自体は動く）

例えば、`rust-analyzer`は公式にArmのバイナリがないので困ってます。（自分でコンパイルすれば動くかもしれないけど未確認）

あと、個人的には`Elm`が動かないのが辛いです。（Arm用の公式バイナリがない）

## CLIを使おう
Armだとマシンスペックが足りないので、GUIソフトは辛いところがあります。
VSCodeでもそんなにサクサク動きません。

開発に使うものは全部CLIでまとめると現実的な動作速度になるので、勉強すると思って使ってみるのもいかがでしょうか。~~壊してもすぐリセットできるし~~

自分は以下のCLIツールを使っています。

* neovim/emacs(CLIエディタ)
* tmux(ウィンドウ管理)
* zsh/fish(シェル)
* fzf(検索)
* ranger(ファイルブラウザ)
* git(バージョン管理)

ここらへんをカスタマイズすれば個人開発には十分な環境ができると思います。

## カスタマイズ
Chromebookからできる設定はあまり多くないですが、いくつかあります

まず、keyboardのrepeatです。（キーボード設定を探して下さい）

![Screenshot 2020-12-04 at 1.07.04 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55873/1f1ceba5-42d4-e651-883c-da32ce92512a.png)


上記の画像のようにrepeatの箇所をマックスにすると、キーを押しっぱにした時のサクサク感がかなり変わります。


また、Terminal上で`Ctrl + Shift + p`を押すと、Terminalの設定画面になります。

![Screenshot 2020-12-04 at 1.08.45 AM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55873/304ca4f8-b363-2271-9418-69c92cbcd778.png)

この画面からの設定できるフォントは、あまり多くないですが、実は`NerdFont`等のアイコン付きフォントにも変更できます。

ただし、手順が少し複雑なので、[別にまとめた記事](https://www.simple-web-system.work/entry/2020/11/10/123207)を見てください


## まとめ
Linuxに触ってみたい、軽いPCでカフェでプログラミングしたいって人はChromeook買ってみましょう！！