Google Collab や Jupyter Notebook でバックスラッシュを表示させたい

# 序文

プログラミングにおいてどうしてもバックスラッシュが円記号であるのが[しっくりこない|我慢ならない|イケてない|がっかりだ]という方々のために。

# 免責事項

この記事の内容は、2020年10月3日に実現できた方法です。
jupyter notebook や google collab の仕様変更により適用不可になる可能性があることを予めご承知いただければと思います。

# 実現方法

## ユーザースタイルシートを使えばいいじゃんか

ということで、Stylusというドメインごとにユーザー独自でスタイルシートを設定できる機能拡張で実現します。
以下はGoogle Chrome での例ですが、Mozilla Firefox でも同名の機能拡張が存在します。
また、safariでは標準でユーザースタイルシートの機能があるようです。

### Stylus

まずは機能拡張の導入です。
以下のページへアクセスして機能拡張を導入してください。

アドレスバー横のジグソーパズルアイコン（機能拡張）をクリックして、Stylusをピン止め設定しておくとアイコンが常時表示されて便利です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/9f164907-efc7-e740-02e8-e722685b2225.png)

[Stylus](https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne?hl=ja)
https://chrome.google.com/webstore/detail/stylus/clngdbkpkpeebahjckkjfobafhncgmne?hl=ja

### ローカル環境のJupyter Notebookでの設定

`~/.jupyter/custom/custom.css` を作る方法もありますが、今回はStylusでの変更方法です。

Jupyter Notebookを起動してブラウザにて表示させます。
表示後、Stylusアイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/003a2ef9-0c02-c275-dbec-1c2d8cedf6f8.png)

Stylusのcss編集画面が表示されますので、以下の様に入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/2e82684f-9504-69c0-ea45-c607d340245a.png)

```css:css
pre.CodeMirror-line span, .output_text pre{
    font-family: "DejaVu sans mono";
}
```

```text:次で始まるURL
http://localhost:8888/notebooks/
```

このCSSの指定は、jupyter notebookのコードinput欄と結果output欄に該当します。
フォントは、巷では定番であると思われる [DejaVu sans mono](https://ja.fonts2u.com/dejavu-sans-mono.%E3%83%95%E3%82%A9%E3%83%B3%E3%83%88) を指定してみました。

また、「次で始まるURL」のデフォルトは元のページのフルパスになります。このままだとこのノートにしか適用されないので、 `http://localhost:8888/notebooks/` までURLを削っておきます。

この結果、元のページはこのような表示になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/cae94c9e-ac83-e6cd-5967-16426dcb406c.png)

InとOutのフォントがちゃんと変更されました。円記号もバックスラッシュで表示されています。成功です！

### Google Collab での設定

それでは、次にGoogle Collab でのフォント変更をやってみましょう。
jupyter notebook の時と同様に、collabのノートページを開いてStylusのアイコンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/b6d3282c-c4df-adc8-72f4-adc790325b29.png)


表示されたポップアップで、「次のスタイルを書く」の欄に`colab.reaearch.google.com`と表示されています。
そのうちの、`colab`をクリックします。クリックするurlの場所により適用するurlのパターンが変わります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/14d8d478-9436-d3d1-0dc8-7b08e91656cc.png)

次に、cssは以下の様に入力します。
```css:css
div.view-line *{
    font-family: "DejaVu sans mono";
}
```
ここではinput側のスタイルしか設定しません。
なぜなら、google collabは **入力欄と出力欄でドメインが異なる**からです。
入力欄はこのページのドメイン `colab.reaearch.google.com` での表示ですが、出力欄はiframeで別のドメインからの出力となっています。
一旦このスタイルは保存し、もう一度stylusのアイコンをクリックして「次のスタイルを書く」のURLをクリックし、新しい編集ウィンドウを表示させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/b836c25d-e094-a562-ea3f-ea46b1bc4182.png)

今度は、CSSと適用先を以下の様に変更します。

```css:css
div.output_text *{
    font-family: "DejaVu sans mono";
}
```

```text:適用先
ドメイン上のURL : googleusercontent.com
```

上記の通り、出力欄側のドメインは `googleusercontent.com` です。このようにドメイン別にスタイルを書く必要があります。

両方保存したらcollabのノートを確認してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/653626/9f26c85d-75ed-fc03-d6fa-a14f2efbe712.png)

しっかりとフォントが変更され、円記号もバックスラッシュになっています。こちらも成功です！

# 終わりに

今回はStylusを利用して円記号をバックスラッシュに（見た目）変更する方法をご紹介いたしました。
ユーザースタイルシートをうまく活用するといろいろな場面で役に立つかと思います。他のオンラインコードエディタでも試してみてください。