2020-05-30

Ankiプラグインを作りたい

Ankiのプラグインを作るつもりが本体のビルドを試みる記事になった

Article Image

注意:目的に対して的外れであることが判明

以前はAnkiのソースコードより直接インポートしてプラグインを制作していたがpip経由でインストールして開発する方式にいつのまにか変わったということに記事を執筆したあとで気づいた。

この記事ではAnki本体をビルドしようと試みているが、記事がもったいないので公開する。

以下は無知の私の足跡である。プラグインが動かないと言っているのはこのあたりの仕様変更のため。

Ankiプラグインを作りたい

正確には「以前作っていた」のだが、どういうわけか仕様が変わった?ようで以前のプラグインが動かなくなっていた。

もともとは海外の有志のページを参照して作っていたが、改めて公式のドキュメントを探してみると「Development」のページに「README.development」を読みなさいとある。

こちらはGitHubに公開されているファイルの中に存在する。

必要なパッケージと同時にビルドの方法が乗っている。

そもそも以前はpyファイルを直接呼び出せばいけたはずだが、私の環境で実行すると「anki.buildinfo」が見つからないエラーが出る。

ビルド必須?

buildinfoを調べるとコチラのフォーラムが最初にヒットする。

https://anki.tenderapp.com/discussions/ankidesktop/39028-about-buildinfo-and-ankirspy

I'm trying to do some python scripting with Anki. I cloned the source code from GitHub, when I run my code, I got the error for not finding anki.buildinfo and ankirspy. How to solve this?

Ankiのスクリプティングをしているのですが、GitHubのコードをクローンし自前のコードを実行すると「anki.buildinfo」と「ankirspy」が見つからないエラーがでます。どうしたらよろしいでしょうか?

私とほぼ同じ状況。これに対する公式の回答。

You'll need to build the code first - please see README.development

まず先にコードをビルドする必要があります。README.developmentを御覧ください。

ビルドが必須なのだろうか?

Cygwinをインストール

ということでビルドを試す。

WSLCygwinでビルドして下さいとある。

Linuxは普段からGUIを少し使っているがコマンドには詳しくないが「make」コマンドを使ってビルドする模様。

Windows上で代替の手法を知らないので公式の指示に従いとりあえずCygwinをインストールしてみる。

次の記事を参考にさせていただいた。

Windows上で動くUNIX?Cygwinのインストール&設定方法

インストールするパッケージは全く意味がわからないので全スキップした。

いきなりディレクトリの移動がわからない

cdコマンドが効かない。調べる。

Cドライブの場合は

$ /cygdrive/c/...

で始める模様。とりあえずディレクトリ移動はできた。

Runファイルの起動方法がわからない

説明では「./runを実行しろ」とある。確かにrunというファイルがあるが実行方法がわからないので調べる。

どうやらそのまま「./run」と入力すれば良いらしい。

結果

$ ./run
./run: 行 5: make: コマンドが見つかりません

ほらね。どうせ先程のパッケージでインストールしてないとかだろう。

これはビンゴの模様。しかし驚いたことに先程Cygwinをインストールした時に実行したSetup.exeをもう一度実行してインストールするらしい。コマンドないのかよ!と突っ込んでしまった。

延々と続くライブラリのインストール

無事インストールできたのでもう一度ディレクトリを移動してmakeする。

fi;
/bin/bash: 行 3: dos2unix: コマンドが見つかりません
make: *** [Makefile:65: pyenv] エラー 127

ほらね!

先ほどと同様にまた上書きインストールでdos2unixをインストールする。

pyenv/Scripts/activate: 行 3: $'\r': コマンドが見つかりません
make: *** [Makefile:94: develop] エラー 127

Ahhhhhhhh!

謎の改行コードっぽいエラーが出た。

Vs Codeで対象のファイルを確認すると

image-20200528231604894

なるほど。他のファイルは全てLFになっている。

とりあえずここをクリックして上にでたオプションからLFにして保存

もう一度./run

/bin/bash: rustup: コマンドが見つかりません
make[1]: *** [Makefile:90: .build/tools] エラー 127
make[1]: ディレクトリ '/cygdrive/c/Users/Domin/Desktop/anki-master/rspy' から出ます

終りが見えない。

今度はrustupをインストールしようと思い今までと同じようにsetupから行うと・・・ない。最初から5割ほど諦めていたが、既に諦め度が8割を超えてきた。

https://www.rust-lang.org/tools/install

どうやらコチラからダウンロードすれば良さそうだ。64bit版のexeを動かしてみる。

DOS画面が文句を言っている。

Rust Visual C++ prerequisites

Rust requires the Microsoft C++ build tools for Visual Studio 2013 or later, but they don't seem to be installed.

The easiest way to acquire the build tools is by installing Microsoft Visual C++ Build Tools 2019 which provides just the Visual C++ build tools:

https://visualstudio.microsoft.com/downloads/#build-tools-for-visual-studio-2019

Please ensure the Windows 10 SDK and the English language pack components are included when installing the Visual C++ Build Tools.

Alternately, you can install Visual Studio 2019, Visual Studio 2017, Visual Studio 2015, or Visual Studio 2013 and during install select the "C++ tools":

https://visualstudio.microsoft.com/downloads/

Install the C++ build tools before proceeding.

If you will be targeting the GNU ABI or otherwise know what you are doing then it is fine to continue installation without the build tools, but otherwise, install the C++ build tools before proceeding.

Continue? (Y/n)

うーむ。今度はVisual C++ Build Tools 2019が無いらしい。

image-20200528233321915

対象のURLから飛んでBuild Tools for Visual Studio 2019をインストールしてみる。色々ありすぎて違う気もする。

image-20200528233200622

DLして実行するとインストール画面が出るのでC++ Build Toolsをチェックしてインストール

やたら重い。不安になるが5分ぐらいで完了。

再起動を求められる。

再びRustをインストール。

今度は成功した。

Rustとは

比較的新しいプログラミング言語。まだ知名度は低め。

Cのようにコンパイルが必要なため実行速度がC言語並に早い。

型とリソース管理でメモリの安全性が高い。

インストールが簡単。学習難易度が高い。

など、いろいろ特徴がある言語のようだ。

高速で動くのであれば仮想通貨トレードのバックテストには良いかも・・・?

とりあえずサクサク次に行こう。

もう一度/runしてビルド

どうやらエラーなく進んでいる模様。

なんだか見覚えがあるメッセージが出て画面が止まる。

maturin develop --release --strip

そういえば冒頭のコミュニティにここで止まるがどうしたらいい?と書いてあった。

The first time that command runs, it needs to download Rust libraries, and if your internet connection is slow that may be taking a long time - you could monitor the download using the network tab of activity monitor.

意訳:最初はRustライブラリのDLで時間がかかります。インターネットが遅ければ時間がかかるかもしれません。アクティビティモニタのネットワークタブで確認できるかも。

アクティビティモニタがなにかは分からないが、少し待ってみる。

※MACの管理ツール的な物のようだった。

少し待つとビルドが開始

止まっていた画面がどんどん流れはじめる。どうやら成功した模様。

CPUの使用量が100%になる。

protocコマンドがみつかりません

ほらね。

/bin/bash: protoc: コマンドが見つかりません

Cygwinのページに固有ページがあるのでこちらもSetupからインストールできそう。

protobufという名前でパッケージを検索

image-20200529120109065

沢山ある。どれだろう。

image-20200529120214862

とりあえずCygwinのページで先頭に指定してあるこれをインストールしてみる。バージョンは3.7.1-1にして次へ

image-20200529120327453

どうやら必要なものは自動で追加される模様。

perlコマンドが見つかりません

./runを実行すると即エラー

perl: コマンドが見つかりません

もう一度インストール

image-20200529120731948

おそらくコレでいいだろう。カテゴリが「インタプリタ」になっているため言語なのは間違いない。

インストールして再び./run

ビルドが走り始めたのでひとまず安心。

さーて、来週の見つからないコマンドはー?

わけワカメです。またコマンドが見つからないようです。

./scripts/build-mo-files: 行 18: msgmerge: コマンドが見つかりません ./scripts/build-mo-files: 行 18: msgfmt: コマンドが見つかりません

よく考えたらそういえばREADME.developmentに一覧が書いてあったような・・・

とあった。確かにいままで引っかかったものが入っている。とはいえmsgmerge,msgfmtはない。

gettextで調べると一緒にmsgmerge等が引っかかるのでこれに含まれる?

image-20200529123829155

ついでにrsync

image-20200529123902612

curl

image-20200529124015469

こちらをインストール。

ripgrepcargoもインストーラーからは指定不可能。

ここで一度./runしてみる

失敗。同様のエラー。

protocの例からgettext-develを入れてみる。develという接尾辞が付いているという理由。develとはなんだろうか?

image-20200529124930613

たぶんNode.jsでいうところの開発用ライブラリdevDependenciesのようなものなのでは?

バージョンはgettext無印と完全一致。

では、インストールして./runする。

どうやらあっていたようでエラーなし。

諦めず./run

No module named 'PyQt5.QtWebEngineWidgets'

というエラー。PyQtは聞いたことが有る。PythonGUI化ツールではないだろうか。

そういえば書いてなかったがAnkiPythonで書かれたプログラムだ。

Starting Anki... Traceback (most recent call last):

こんな表示も出ている。

TracebackPythonの例外処理で止まっているはず。Anki実行直前まできている?

Cygwinでpip installできるのか?

試してみる。

Cygwinにて

$ pip install PyQt5

正常に起動。インストールされた模様。

では、もう一度./run

エラー。

そうか、PyQt5が無いわけではなかった。PyQtWebEngineなんとかと言っている。

少し調べるとこちらのサイトにてパッケージが分離されたとのこと。

PyQt5.12でWebEngineWidgetsが分離された

次のコマンドを実行。

$ pip install PyQtWebEngine

こちらも正常終了。では./run

エラー。謎だ。

ああ、またCygwinSetupからインストールしないといけないのか?仕組みが理解しきれていない。

とりあえず今までの経験から

pyqt5-common, pyqt5-develをインストール

image-20200529131014836

これまたたくさんありすぎて違う気もする。

やはり、エラー。

pip list

image-20200529131409598

バージョンが違うからだろうか?

pyqt5pip uninstallしてバージョンを落とす

$ pip install pyqt5==5.14.0

./run

エラー。

README.developを読み直す

なんと下の方にWinodws向けのセットアップ方法が書いてあった。

だいたいコレまでにやってきたことが書いてある。

最後に気になる点が。

Open a cmd.exe (command prompt) on the Anki repository and run the command sh run

  1. Do not use bash run because it my call for Windows Subsystem for Linux
  2. Do not use any Cygwin terminal as mintty.exe because the rust lang compiler does not work with them

cmd.exeにてsh runで実行せよとのこと。shwindowsでは使えないコマンドでは?

busyboxというものを使う

Linuxのコマンドを使えるようにbusyboxを使う。

いくつか調べたが一番わかり易い次のサイトをベースにインストール。

Windowsでbusyboxを用いてLinuxの基本的なコマンドを使用する

windowsのpathの通し方が書いていないがこれもよく忘れるので参考サイト

Windows10で実行ファイルへのパスを通す手順

このままだとmakeコマンドが見つからないエラーが出るので次のサイトを参考にしてwindows上でも使えるようにした。

Windowsでmakeコマンドを使う

PCを再起動。

make clean

Cygwinから一旦ビルドしたものを消す。

ankiのフォルダに入ってmake clean

コマンドプロンプトからからやるとエラーになるので注意。

コマンドプロンプトからsh run

ビルドが走りはじめる。

image-20200529152204135

また謎のエラー。

protoc --proto_path=../proto --python_out=anki --mypy_out=anki ../proto/backend.proto ../proto/fluent.proto process_begin: CreateProcess(NULL, protoc --proto_path=../proto --python_out=anki --mypy_out=anki ../proto/backend.proto ../proto/fluent.proto, ...) failed. make (e=2): 指定されたファイルが見つかりません。 make[1]: *** [.build/py-proto] エラー 2

先程のprotocのようだが内容がよくわからない。

ここで万策尽きる。

Cygwinに戻って./runも同様のエラー。

buildinfo.pyはどうか?

ビルドそのものは成功しているのではないかと思うのでankiのフォルダから冒頭で「見つからなかった」buildinfo.pyを検索してみるとanki-master\qt\aqtの中に生成されている模様。

ひとまず次回は以前作成したプラグインを実行してみるテストへシフトしよう。

さいごに

完全なる日記。

結局./runが最後まで走ることはなく、私の無知さも含めて公開されることになった。

これが役に立つことは無い気がするが、少しでも誰かの参考にだれば幸いだ。



この記事のタグ

この記事をシェア


謎の技術研究部 (謎技研)