🐥
DeeplをCLI上で実行するアプリを作った
DeeplをCLI上で実行するアプリ
使い方
リリースページからダウンロードするかリポジトリをクローンしてビルドしてください。
ダウンロードした(or ビルドした)ファイルをPATH
の通っているディレクトリにおいてください。
$HOME/.local/bin/
以下に置く場合は
$ cp path/to/deepl-translation $HOME/.local/bin/
deeplのAPIを叩く都合上、アクセストークンが必要なのでdeeplの無料プランに登録してください。
アクセストークンは環境変数DEEPL_TOKEN
に登録してください。
bash
export DEEPL_TOKEN=<YOUR TOKEN>
翻訳元の言語や翻訳先言語は$HOME/.config/deepl-translation/setting.json
にデフォルト値を設定することができます。
setting.json
{
"source_lang": "EN",
"target_lang": "JA"
}
このファイルが存在しないときにdeepl-translation
コマンドを実行すると値が空の設定ファイルが生成されます。
コマンドはファイル入力と標準入力を受け付けます。
標準入力を使う場合は--stdin
オプションをつけてください。
$ deepl-translation text.txt
翻訳後のデータは標準出力に書き出されるのでリダイレクト等で保存してください。
一時的に翻訳元・翻訳先言語を変えたいときは-s(--source_lang)
,-t(--target_lang)
オプションが使用できます。
開発を通じて得た知見
- 標準入力でパイプとそうでないときの切り替え
terminal.IsTernimal(syscall.Stdin)
で判断できる。
if terminal.IsTerminal(syscall.Stdin) {
// is not pipe
fmt.Scan(&rawSentense)
} else {
// is pipe
pipeIn, err := ioutil.ReadAll(os.Stdin)
if err != nil {
return err
}
rawSentense = string(pipeIn)
}
Discussion
ターミナルのチェックは github.com/mattn/go-isatty パッケージのほうが軽くてよく出来てますよ。
ありがとうございます!
この記事を執筆された後に、公式がCLIを公開しました。
Python実装ですが…情報ありがとうございます!
公式がPython実装なのでgoで実行バイナリにできるメリットまだ残ってるかなーと思ってます。
時間ができたらソースを読んでみたいと思います。