「ほん訳コンニャク」 を使ってみよう。

<blockquote>
  <font color="#7777777">※この記事では<a href="https://qiita.com/cabernet_rock/items/670d5cd597bcd9f2ff3f"><font color="#55c500"><b>『「ほん訳コンニャク」 を食べて 論文を読もう』</b></font></a>で紹介している <font color="#0f3c4b"><b>Translation-Gummy（ほん訳コンニャク）</b></font>の導入方法を解説しています。「<font color="#0f3c4b"><b>Translation-Gummy（ほん訳コンニャク）</font></b>？何それ美味しいの？？🤔」という方は、上記の記事を覗いてみてください🙇‍♂️</font>
<details>
  <summary><b>こういったことができます</b></summary>  
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308700/fdc70e3e-138b-dc1f-5a28-86698946ef9c.gif" alt="gummy-journal">
</details>
</blockquote>

# はじめに

　<b><font color="red">「英語論文のURL（or PDF）を投げれば日本語翻訳付きのPDFを生成する」</font></b>という機能のウケが良かったようで、想像以上の数の方々に <a href="https://qiita.com/cabernet_rock/items/670d5cd597bcd9f2ff3f"><font color="#55c500"><b>Qiita記事</b></font></a> や <a href="https://twitter.com/cabernet_rock/status/1289147894906249217?s=20"><font color="#1DA1F2"><b>Tweet</b></font></a> を見ていただいたり、<a href="https://github.com/iwasakishuto/Translation-Gummy"><font color="#333333"><b>Github</b></font></a> や <a href="https://pypi.org/project/Translation-Gummy/"><font color="#4584b6"><b>PyPI</b></font></a> から実際にインストールして使っていただけているようです。<b>ありがとうございます🙇‍♂️</b>

　お陰様で、エンジニア以外の方々の耳にも情報が届いたらしく、<b>「今までプログラミングや Python を触ったことがないのだけど、これを機に触ってみたいと考えていて…〇〇について教えていただけませんか？」</b>といった嬉しい声もいくつかいただきました。

　非常にありがたいお言葉ですし、開発者としての責任もあるので、微力ながらお力添えをしたいと思い、この記事を書くに至りました。ここでは、<b><font color="red">「インストールしてURLからPDFを生成する」</font></b>までの流れを解説したいと思います。<font color="#777777"><sub>（エラーが出る箇所や不明な点ありましたら、<font color="#55c500"><b>コメント</b></font>や <a href="https://www.twitter.com/messages/compose?recipient_id=1042783905697288193&text=%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%EF%BC%88https%3A//qiita.com/cabernet_rock/items/1f9bff5e0b9363da312d%EF%BC%89%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C%E2%80%A6"><font color="#1DA1F2"><b>DM</b></font></a> 等で指摘していただけると幸いです。）</sub></font>

>※ これ以降 `$` の後に出てくる文字はコマンドと呼ばれる命令文であり、ターミナル<font color="#777777">(Mac)</font> /コマンドプロンプト<font color="#777777">(Windows)</font> 上で実行するものになります。

>```sh
# "#"で始まる行は説明文です。
# ex.)
$ python3 -c 'print("Hello World!")'
>>> Hello World!
```

## Python

　Pythonの環境構築・セットアップに関しては、非常にたくさんの解説記事が出ているため、ここでは参考記事[^1]を挙げるだけにさせていただきます。なお、<b>「Mac/Linuxの場合、システムデフォルトでPythonが入っている[^1]」</b>ので、<b><font color="red">面倒な方は特別なことはせず、デフォルトのPythonを使っていただいても構いません。</font></b>

[^1]: [『Pythonを書き始める前に見るべきTips』> Pythonのセットアップ > Pythonの導入](https://qiita.com/icoxfog417/items/e8f97a6acad07903b5b0#python%E3%81%AE%E5%B0%8E%E5%85%A5)


## Translation-Gummy

　導入方法は <a href="https://github.com/iwasakishuto/Translation-Gummy#installation"><font color="#333333"><b>Github</b></font></a> に書いてあるので、そちらに従って [`wkhtmltopdf`](#wkhtmltopdf), [`webdriver`](#webdriver), [`Translation-Gummy`](#pypi)(Python package)をインストールしていきます。

### 依存ツール

#### wkhtmltopdf

　論文の内容を取得、翻訳した後PDFを生成する過程で、<b>「HTMLでレイアウト→PDFを生成」</b>ということをしているのですが、それに必要なのが <b><a href="https://wkhtmltopdf.org/index.html">wkhtmltopdf</a></b> になります。[このダウンロードサイト](https://wkhtmltopdf.org/downloads.html)から、自分のPCのOS/Distributionにあったものをダウンロードしてください。

　なお、コマンドでインストールする場合、以下のコマンドでインストールできるかと思います。

```sh
# Debian/Ubuntuの方:
$ sudo apt-get install wkhtmltopdf
# macOSの方:
$ brew install Caskroom/cask/wkhtmltopdf
```

　いずれの方法でインストールしたとしても、以下のコマンドで `google.pdf` が作成できればセットアップは完了です。

```sh
$ wkhtmltopdf http://google.com google.pdf
```

<details>
  <summary><b><code>google.pdf</code></b></summary>  
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308700/a1863d18-e6f0-1bfe-ac97-9ac23af0285a.png" alt="google.pdf">
</details>


#### webdriver

　chrome driverを使う場合は、この記事[^2]が参考になるかと思います。なお、その場合、以下のコードが通ればセットアップは完了です。

[^2]: [『Python + Selenium で Chrome の自動操作を一通り』> ChromeDriver のインストール](https://qiita.com/memakura/items/20a02161fa7e18d8a693#chromedriver-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

```python
$ pip3 install selenium
$ python3
>>> from selenium import webdriver
>>> driver = webdriver.Chrome()
>>> driver.get("https://www.python.org")
>>> driver.save_screenshot('screenshot.png')
True # Trueと出れば、セットアップは完了です。
```

<details>
  <summary><b><code>screenshot.png</code></b></summary>  
  <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/308700/44c1534d-b37b-72c1-1835-ef48903367a2.png" alt="screenshot.png">
</details>

### PyPI

```sh
$ pip3 install Translation-Gummy
```

　このコマンドだけで、<font color="#0f3c4b"><b>Translation-Gummy</font></b> を動かすのに必要な Python Package は全てインストールされます。なので、これだけで大丈夫です。

## PDF生成

### Python 実行

　ここまでで、<b>「英語論文のURL（or PDF）を投げれば日本語翻訳付きのPDFを生成する」</b>という当初の目的は達成されます。

```python
# ">>>" 以降をコピペしてください。
$ python3
>>> from gummy import TranslationGummy
# １つでも[success]と出ていればセットアップ成功です。
>>> gummy = TranslationGummy(gateway="useless", translator="deepl")
# "DRIVER_TYPE: None" と出た場合、webdriverの設定にミスがあることを意味しています。
>>> pdfpath = gummy.toPDF(url="https://www.nature.com/articles/ncb0800_500", path="sample.pdf", delete_html=True)
# PDFを生成するまでのログが出ます。出力が多いと感じた場合、一つ前で
# gummy = TranslationGummy(gateway="useless", translator="deepl", verbose=False, translator_verbose=False)
# とすれば、出力される情報が少なくなります。
>>> print(pdfpath)
sample.pdf
```

### コマンド実行

　しかし、毎回Pythonを実行して、上記のコードをコピーするのは面倒ですよね…。<font color="red"><b>ということで、ターミナル<font color="#777777">(Mac)</font> /コマンドプロンプト<font color="#777777">(Windows)</font> 上から直接実行できるようになっています！</b></font>

```sh
$ gummy-journal "https://www.nature.com/articles/ncb0800_500" 
```

だけ覚えれば大丈夫です！🙌

## 【任意】 Gateway と 環境変数

<details>
  <summary><b>Gateway と 環境変数のセットアップ方法</b></summary>
  <div>

　現在対応しているGatewayサービスは、[こちら](https://gateway.itc.u-tokyo.ac.jp/dana-na/auth/url_default/welcome.cgi) (`gummy.gateways.UTokyoGateWay`) だけなのですが、自身のGatewayサービスを間に挟むことで、<b>有料ジャーナルからも全文取得することができるようになります。</b>

　この時、以下のように毎回 `<USERNAME>` と `<PASSWORD>` を入力するのは面倒です。

```python
>>> gummy = TranslationGummy(gateway="utokyo", translator="deepl")
# 以下のように、<USERNAME> と <PASSWORD> を入力する必要があります。
>>> pdfpath = gummy.toPDF(url="URL", username="<USERNAME>", password="<PASSWORD>")
```

　そこで、環境変数に値を保存できるようにしています。<font color="#777777"><sub>（セキュリティ的にあまり推奨された手段ではありませんが…）</sub></font>とはいえ、PC全体の環境変数に書き込んでしまうと、他のシステムで問題が起きる可能性もあるので、<font color="#0f3c4b"><b>Translation-Gummy</b></font> 用の環境変数ファイルを用意します。（`import gummy` 時に自動的に作成されています。）

```python
$ python3
>>> from gummy.utils import where_is_envfile, show_environ,  write_environ

# 環境変数が書き込まれているファイルがある場所を示します。
>>> where_is_envfile()
'/Users/iwasakishuto/.gummy/.env'

# 上記のファイルに、値を書き込みます。
>>> write_environ(
...    TRANSLATION_GUMMY_GATEWAY_UTOKYO_USERNAME="<USERNAME>",
...    TRANSLATION_GUMMY_GATEWAY_UTOKYO_PASSWORD="<PASSWORD>",
>>> )

# 実際に書き込まれたか、確認します。
>>> show_environ()
TRANSLATION_GUMMY_GATEWAY_UTOKYO_USERNAME = "<USERNAME>"
TRANSLATION_GUMMY_GATEWAY_UTOKYO_PASSWORD = "<PASSWORD>"
```

　これで、以降は以下のように<USERNAME> と <PASSWORD> を入力せず、Gatewayサービスを利用できるようになります。

```python
>>> gummy = TranslationGummy(gateway="utokyo", translator="deepl")
# 以下のように、<USERNAME> と <PASSWORD> を入力する必要がありません！！
>>> pdfpath = gummy.toPDF(url="URL")
```

　※環境変数の命名規則ですが、以下のように設定しています。

```python
>>> ENV_VARNAMES = "TRANSLATION_GUMMY_{1}_GATEWAY_{2}"
# 1 = Uppercase of class name without 'GateWay'
# 2 = varnames, which is also the key of `gatewaykeywargs`
```

  </div>
</details>

## おわりに

- 〇〇についてもう少し詳しく書いて欲しい。
- ここに書いてあることをやったのに動かない！！
- 使ってみたけど、読みたいジャーナルがサポートされてない！！
（現在サポートしているジャーナルは <a href="https://github.com/iwasakishuto/Translation-Gummy/wiki/Supported-journals">ここ</a> から確認できます。）


などなどありましたら、<font color="#55c500"><b>コメント</b></font>や <a href="https://www.twitter.com/messages/compose?recipient_id=1042783905697288193&text=%E3%81%93%E3%81%AE%E8%A8%98%E4%BA%8B%EF%BC%88https%3A//qiita.com/cabernet_rock/items/1f9bff5e0b9363da312d%EF%BC%89%E3%82%92%E8%AA%AD%E3%82%93%E3%81%A0%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C%E2%80%A6"><font color="#1DA1F2"><b>DM</b></font></a> 等で指摘していただけると幸いです。