もずく・Ð・Web3.0です。
[本記事はだいぶ昔に書いた記事です。内容が古くなっている可能性大です。]
ALISハッカー部が独自に発行しているトークン「AHT」、ハッカー部にプログラム開発を依頼できたり、ALISのクリエイターさんたちにイラストを頼めたりするので、ちょっと気になりますよね。
AHTはALISで記事を書くだけでも配布される仕組みがあるですが、そのためにはハッカー部のウェブサイトにて、ALIS APIのid_tokenなるものを登録しなければなりません。
ゆうきさんがWindowsで取得する方法を丁寧に書いてくださっているので、Windowsの人はこれでいけそうですね。
一方、仮想通貨のあかちゃんさんもMacで取得する方法を書いてくださっていて、こちらはGitなどの本格的なプログラム開発環境もついでに整えちゃおう…という内容になっています。
プログラミングに興味ある人にとってMacは羨ましいですよね~
かく言う私も5年ほどMacユーザでしたが、現職場でやりとりされる文書がことごとくWordやExcelで、同僚で共有するスライドもPowerPointなので、マジョリティの圧に屈しました。
Macって、「Python」とかググったときによく登場するターミナル(Termial)が標準で使えるんですよね。コマンドプロンプトみたいなやつ。
Linuxというバリバリの開発者が使っているOSにもターミナルがあります。マニアックな人などはマウスに全く触れずにあらゆる操作をターミナルからしたりします。
だからプログラミングに興味あるな~っていう人は、ぜひこの「ターミナル」を手に入れたいところですよね。
WindowsにもコマンドプロンプトとかWindows Power Shellとかありますが、MacやLinuxのターミナルとは全くの別モノなんです。
MacやLinuxのターミナルは基本的なコマンドが共通しているので、操作を覚えたらどっちでも使えるんですよね。羨ましい。
でも実は、WindowsでもMacやLinuxみたいなターミナルが使えるんですよ。
というか、LinuxをWindowsに組み込んで、Windowsの画面からLinuxのターミナルが使えるようにできるんです。
ということで、この記事では、ALIS APIのid_tokenの取得がてら、Windowsでターミナルを使えるようにする方法を説明したいと思います。
ドヤ顔でターミナルを叩いているMacユーザをこれで一気に追い抜けるぜ…!!
ではいきましょう~
この記事に従って進めてください。(いきなり他力本願)
補足すると、この作業には大きく2ステップあって、
1. コントロールパネルからWindows Subsystem for Linux(WSL)を有効にする
2. Microsoft StoreからWSLの上で動かすLinuxを選んでインストールする
という手順になります。
LinuxというのはWindowsやMacと違って色々と種類があるのですが、こだわりがなければ「Ubuntu」というのを選んでください。
変な名前ですが、アフリカの言葉で「他者への思いやり」とかいった意味です。
以下、Ubuntuを前提として説明を続けます。
他のLinuxだとpipをインストールするときのコマンド名が変わりますので、自力で調べてもらうことになります。
※具体的には「apt-get」というパーケージ管理コマンドが別のものになります。(Debian GNU/Linuxもapt-getです)
WSLをインストールした後のMicrosoft Storeの画面に起動ボタンがあるので、WSL(Ubuntu)を起動します。
黒い画面(ターミナル)が起動して、しばらく「Installing, this may take a few minutes...」と表示されたまま止まります。
少し待っていると、以下のような英文がダラダラ…と出てきます。
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:
最後にユーザ名を設定しろと言っているので、
Enter new UNIX username: mozk
とか入力してEnterキーを押します(mozkって入力しないでね)。
今度はそのユーザに設定するパスワードを聞かれるので入力。
Enter new UNIX password:
入力すると「*」が出るなどの変化はしませんが、ちゃんと入力されています。
Retype new UNIX password:
で、もう一度パスワードを入力。
失敗しても何度でもやり直せるのでご心配なく。Try again? [y/N] と訊かれるので y を入力してEnterです。
すると、以下のように表示されて準備OKです。
passwd: password updated successfully
Installation successful!
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.
To run…のところに書かれているのは、管理者権限でコマンドを実行するときの話です。管理者権限で実行するときは、コマンド名の前に「sudo」と付けなさいって言われています。
パッケージ(≒ソフトウェア)をインストールするときに必要になるので覚えておきます。
あと、緑色の文字で
ユーザ名@PC名: $
と最後に表示されていると思います。
この「$」の後ろにコマンドを入力して操作します。
このあたりはコマンドプロンプトと同じです。ただの飾りです。偉い人にはそれが分からんのですよ。
以下、コマンドを打ち込むところでは「$」とだけ表記していますが、実際には「ユーザ名@PC名:」というのがその前に付きます。
Linux(Ubuntu)にはPythonは最初からver.3がインストールされています。
試しに、
$ which python3
と打ち込んでEnterキーを押してみましょう(この作業を以降では「コマンドを実行する」といいます)。
スペースも含めてすべて半角ですよ。
これは「python3」っていうコマンドはどこにあるの?って訊く命令です。
すると以下のように表示されると思います。
/usr/bin/python3
「usr」という名前のフォルダの下にある「bin」という名前のフォルダの下に「python3」というコマンドが存在するよ…ということです。
Windowsのコマンドプロンプトでは「¥」でフォルダを区切りますが、ターミナルでは「/」です。
ちなみに、ターミナルでは「フォルダ」と言わずに「ディレクトリ」って言います。
☕ 余談ですが、最初にインストールされているのがver.3だけというのは素晴らしいことなんです。Macはまだver.2がインストールされているという話を聞いたのですが、Pythonはver.2とver.3で互換性がないんです。
世の中の情報はほとんどver.3なのに、システムにインストールされているのがver.2なので困ります。結果、両方のバージョンを混在させることになったりするのですが、これが超ややこしい…😓 私、これが理由でPythonが好きになれないんですよね。
さて、話を戻します。
Pythonのパッケージ(Python用のソフトウェア)を追加でインストールするには「pip」というコマンドを使います。
そのために、まずその「pip」をLinuxにインストールする必要があります。
Linux(Ubuntu)にパッケージをインストールするコマンドは「apt」です。
aptでパッケージをインストールする前には、毎回、おまじないとして以下のコマンドを実行しておきましょう(パッケージのデータベースを更新します)。
$ sudo apt update
ちなみに、apt-getは管理者権限の必要なコマンドなので、最初に「sudo」を付けています。
sudoを付ける場合にはパスワードが要求されるので、先ほど設定したパスワードを入力してください。例によって * とか出ませんが入力されています。
「Get:1 http://…」みたいな文字列がズラズラっと表示されますが、Linuxではよくある光景なので驚かないでください。
最後にErrorとか書かれてなければ大抵OKです(という姿勢でいるといつか火傷しますが)。あと、インターネットに接続されていないと当然失敗します。
では、pipをインストールしてみます。次のコマンドを実行してください。
$ sudo apt install python3-pip
!!pythonの後の「3」という数字は絶対に忘れないでください!!
「3」を付けなくてもインストールは始まるのですが、Pythonのver.2がインストールされてしまいます。!!
もずくさん、それやっちゃって後から気づき、Ubuntuを再インストールしました…
またまたむっちゃ文字が流れて、最後に
Do you want to continue? [Y/n]
と表示されて終わります。
これは、pipをインストールするためには、それに依存する別のパッケージ(ずらずら表示されているのはそれです)が必要だけど、一緒にインストールする?って聞かれているのです。
当然Yesなので「y」と入力したらいいのですが、[Y/n]というようにyのほうが大文字になっているときはEnterキーを押すだけで大文字のほうを選択されたことになります。
インストールがはじまります。
今回はちょっと時間がかかります。
☕ 時間がかかるので余談を。
ゆうきさんの記事で、WindowsにwarrantパッケージをインストールするにはCコンパイラというものが必要で…という話が出てきます。回避方法として、Visual Studioというソフトウェアをインストールするなどの方法が書かれています。Visual StudioにはCコンパイラが含まれるので、そのCコンパイラを兼用すればwarrantがインストールできるということです。
Linuxの場合、この「○○をインストールするために先に□□をインストールしなければならない」というようなことはあまり起こりません。実際には起こっているのですが、先ほど[Y/n]で答えたように、パッケージの依存関係を自動的に検出して一緒にインストールしてくれるからです。便利ですね。
さて、「ユーザ名@PC名: $」というコマンドプロンプト(と言います)は戻ってきたでしょうか。
戻ってきたら、以下のコマンドを実行してみてください。
$ pip3 --version
バージョンが表示されたら成功です。
ちなみに「python3 --version」と打ったらPythonのバージョンが表示されます。
決まりがあるわけではないのですが、「コマンド名 --version」と打つと大抵バージョンが示されるので、インストールが成功したか…とか、そのパッケージがそもそもインストールされているか…を確認するときによく使います。
なお、先ほどから「pip」と言っていますが、正確には「pip3」というコマンドをインストールしています。同様に、pythonというコマンドはなくて「python3」です。
もし「pip」や「python」というコマンドが存在したら、それは魔のver.2です。紛らわしくてPythonに殺意が沸きますよね。
「warrant」というPythonのパッケージが、id_tokenを取得するPythonのプログラム(スクリプトって呼ぶよ)で使われるのでインストールする必要があります。
「pip」はaptコマンドでインストールしましたが、今度の「warrant」はpipコマンドを使ってインストールします。
ちょっとややこしいのですが、大抵のパッケージ(ソフトウェア)はUbuntuのパッケージ管理システムである「apt」でインストールするのですが、Pythonくらい大規模な専用パッケージを持つソフトウェアだと独自のパッケージ管理システムを持っています。
JavaScript(Node.js)の「npm」も有名です。ウェブプログラミングを勉強するなら確実に使うことになると思います。
では、pipを使ってみましょう。次のコマンドを実行します。
$ pip3 install warrant
sudoは不要なので、パスワード入力もなしです。
インストールが終わったら確認してみましょう。
次のコマンドを実行してみてください。「|」は日本語キーボードならBackSpace(BS)の左側にあります。
$ pip3 list | grep warrant
pip3のバージョンによっては暗い赤文字で恐ろしげなメッセージが出ますが、表示のフォーマットが変更になるよんっていうどうでもいい話なのでスルーしましょう。
ついでなので、このコマンドについても説明しておきましょう。
warrantは単体でターミナルから使用するコマンドではないので、「warrant --version」は使えません。
なので、pipでインストールされたパッケージの一覧を表示する次のコマンドを利用します。
$ pip3 list
実際に実行しても構いません。パッケージの一覧がづらづらっと出てきたかと思います。
体力と時間が余っているなら、その一覧からwarrantを目視で探してもいいのですが、もずくさんは辛いです。
そこで、このコマンドの出力(一覧の文字列)を別のコマンドに渡して、その別のコマンドでwarrantの有無をチェックしてもらっているのが最初のほうの「pip3 list | grep warrant」というコマンドです。
「grep」というコマンドは、grepの後に指定した文字列(今回は「warrant」)を検索して、もし存在したらその文字列を含む行を出力します。存在しなかったら何も出力しません。
このように、あるコマンドの出力を別のコマンドに渡すのが「|」という記号で、「パイプ」と呼びます。
これだけではまだid_tokenを取得することはできません。
さすがハッカー部の入門審査だけありますね!
ALIS APIはAWSというAmazonのクラウドサーバを利用しています。
その設定をしておかないとid_tokenを取得するためのPythonスクリプトが実行できません。
ゆうきさんの記事では「credentials」という名前のファイルを作成する方法でしたが、ここではせっかくなのでAWS CLIというAWSを利用するためのコマンドラインツールをインストールしてみましょう。
次のコマンドを実行してください。長くなってきたので打ち間違いに注意です。
$ pip3 install awscli --upgrade --user
正しくインストールされたか確認したいのですが、その前に一旦ターミナルを再起動する必要があります。
ターミナルを終了するのもコマンドです。
$ exit
ターミナルが消えたら、Windowsのアプリから「Ubuntu」を探して実行してください。またターミナルが開きます。
さて、確認しましょう。次のコマンドを実行してバージョンが表示されたら成功です。
$ aws --version
では、AWS CLIを設定しましょう。
次のコマンドを実行すると、順に4つの項目を入力するよう求められます。
$ aws configure
それぞれ以下のように入力してください。XとYのままでOKです。
AWS Access Key ID [None]: X
AWS Secret Access Key [None]: Y
Default region name [None]: ap-northeast-1
Default output format [None]: json
さて、やっと準備が整いました。
すぐにでもid_tokeを取得するPythonスクリプトを実行してみたいところですが、もうひと手間かかります…
そのスクリプトなのですが、WSLでファイルを編集する環境を整えるのは少し手間がかかるので(ターミナルで使えるエディタがどれも一癖あるので)、インターネット上に私がアップロードしたスクリプトをダウンロードします。
次のコマンドを実行してください。複数行になっていますが、1行です。
$ wget https://raw.githubusercontent.com/mozk0x/get-id_token/master/get-id_token.py
でもさすがにこれは打ち間違えそうですね…
ターミナルへのテキストのコピペももちろんできます。
ブラウザ上でテキストをコピーして、ターミナルを選択した状態で右クリックします。すると、ターミナルのカーソルのある位置にコピーしたテキストが貼り付けられます。(もっと早く言えよって?)
正しくダウンロードされたか確認してみましょう。
ターミナル上で、いま開いているファルダ(ディレクトリ)のファイルの一覧を見るには次のように実行します。
$ ls
この「ls」は(今回紹介していないcdと並んで)最頻出コマンドです。覚えましょう。
この記事に従って操作してきただけなら「get-id_token.py」という文字だけが表示されていると思います。
せっかくなので、ファイルの中身を見てみましょう。
$ less get-id_token.py
「less」は指定したファイルの中身を表示するコマンドです。
たぶんターミナル内にコードがすべて表示されているかと思いますが、もし画面からはみ出しているようなら上下キーで操作できます。
lessを終了するには「q」キーを押します。
このコードは富樫さんが公開されているサンプルコードとゆうきさんの記事も参考にさせていただきました。なお、Githubに置いてある富樫さんのサンプルコードにはライセンスが指定されていないようなので一般的な著作権が適用されます。おそらくはサンプルとして完全に自由に使ってよいという意図だと思いますが、念のため、「改変」ではなく「参考」とお茶を濁しておきました…(藪蛇)
ここで、ひとつ注意事項があります。
いまダウンロードしたPythonスクリプトは私(もずく)がGitHubという場所にアップロードしたものですが、もしかしたら私のGitHubのアカウントが奪われて、悪意を持ったコードに改変されているかもしれません。
そこで改変されていないことを確認したいのですが、ここに貼り付けたソースコードと目視で比較するというのはもはや修行です。
せっかくなので、ブロックチェーンの技術的な話でよく耳にする「ハッシュ関数」を使ってもっと簡単に比較してみましょう。
ハッシュ関数はどんなデータでも固定長の文字列にしてしまいます。比較する二つのデータが等しければ出力される文字列も等しくなるので、文字列の比較だけで済むというわけです。
ハッシュ関数についてサクッと知りたい人はこの記事を読んでね:)
次のコマンドを実行してみてください。
$ md5sum get-id_token.py
以下のような感じに表示されたでしょうか?
8dfbd6a83329b63f13a09013b9e8ea0b get-id_token.py
ファイル名の前に書かれた長い文字列が「ハッシュ値」です。
手元で計算したハッシュ値が上記の文字列と一致しているなら、ダウンロードしたPythonプログラムの改ざんはありません。
とはいえ、この文字列を見比べるのもちょっと大変なので、md5sumコマンドのオプションで確認しましょう。
次のコマンドを実行してください(1行です)。ここは手打ちせず、コピペしてくださいね(ターミナルでは右クリックで貼り付け)。
$ echo "8dfbd6a83329b63f13a09013b9e8ea0b get-id_token.py" > MD5SUM
「MD5SUM」という名前のファイルが作られます。lessコマンドで中身を確認してみてもよいでしょう。
続いて、次のコマンドを実行してください。
$ md5sum -c MD5SUM
これは、md5sumコマンドを「get-id_token.py」に適用して、MD5SUMファイルに書かれたハッシュ値と同じかチェックしてくれます。
「get-id_token.py: OK」と表示されたらOKです。
☕ 同じデータに対するハッシュ値でも、ハッシュ関数の種類が違えば変わります。md5sumというコマンドはMD5という暗号学的ハッシュ関数を利用しますが、他のハッシュ関数を利用するコマンドを使用したら意味がありません。なお、MD5は脆弱性が判明しているので電子署名などには利用されませんが、強度は関係のないダウンロードファイルの検証には使用されています。
さて、やっとこさ実行です。。
なお、このスクリプトはALISのパスワードを入力させます。セキュリティの問題が潜んでいるかもしれませんが、自己責任ということでお願いします。
次のコマンドを入力してください。
$ python3 get-id_token.py
ALISのユーザIDとパスワードを訊かれるので入力すると…
User ID: mozk
Password:
ここに出てくる超長い文字列がid_token!
はい、やっと取得できました~
ターミナル上に表示されているテキストも、マウスで選択してCtrl-Cでコピーできます。メモ帳でも貼り付けておいてください。
ここは説明がなくてもわかるとは思いますが、ハッカー部のウェブサイトがあまり宣伝されていなくて探し回ることになるので、ここに貼り付けておきます。
でも一応手順を…
1. 右上の「ログイン」でTwitterアカウントと連携します。
2. するとログインボタンのあったところがTwitterアイコンに変わるので、それをクリックします。
3. 左側の下の方にALISというボタンがあるのでクリックするとtoken_idを入力するよう求められます。
うまくいけば、ALISの文字の下にALISのユーザ名が表示されます。
お疲れさまでした~👏👏👏