1年生向けの「体験演習」は,後期開講の科目です.
7回の授業で演習内容を構成し,前半(第2回~第8回)と後半(第9回~第15回)に,異なる受講者に対して同一内容をやってもらいます.初回にガイダンスを入れれば,ちょうど15回の授業となります.
所属メジャー(ネットワーク情報学メジャー)の協議により,私は7回のうち2回を担当しています.隣り合った実験室で平行実施し,1回分は教材を作成して隣室の先生にも渡し,もう1回分は隣室の先生に作ってもらっています.
テーマはIoT,そしてmicro:bitです.学生は持参したBYODのPCでhttps://makecode.microbit.org/にアクセスし,「新しいプロジェクト」でブロックエディタの画面を表示させて,プログラミングをしていきました---というのは今年度,前半の話です.
前半の授業の2回目を終えた際,隣室の先生より,このブロックエディタのバージョンのせいか,micro:bitのせいかはただちに分からないが,特定の課題が思うようにいかなかったという指摘をもらいました.そこでhttps://makecode.microbit.org/v0より利用可能な,古いバージョンを(もちろん事前確認の上で)後半に使用することとし,こちらの教材を修正して,昨日実施しました.
いずれのページにせよ,学外への通信を伴います.ノートPCからの一斉アクセスについて,年を追うごとに改善しているとはいえ,何かあって通信できないとなると,重要な演習ができなくなります.
そこで自分のLinuxサーバで,v0のほうのブロックエディタを稼働させ,学外通信に不具合が生じたときは,そこに接続してもらうことにしました.
最新版のほうは,今年度,前半の実施の前に用意しました.
コンテナを立ち上げて,ブラウザでアクセスし,URLの後ろに「/v0」をつけてみると,エラーが出ました.横着せず,「v0版」のサーバを作らないといけません.
Dockerfileやコマンドラインとにらめっこする前に,情報収集したところ,昨年のブログ記事で,npm installで古いバージョンを指定すればよい,というのが指摘されていました.
自分のDockerfileでも,試してみました.https://www.npmjs.com/package/pxt-microbitより,_v0の最新バージョンのタグが0.14.58であることを確認し,2019/11/16の記事で
&& npm install -g pxt \
と書いていた行を
&& npm install -g pxt pxt-microbit@0.14.58 \
と書いて,docker buildしたものの,終わりのほうのメッセージを見ると「+ pxt-microbit@2.1.38」と入っていました.これは(_v0でない)最新版と同じです.
Dockerfileのそのあとの「pxt target microbit」によって,pxt-microbitがインストールされていることに気づきました.そこでは-g(グローバルインストール)オプションなしのnpmが実行されているらしく,となるとpackage.jsonで,pxt-microbitのバージョンを指定しておけばよさそうです*1.
最終的にDockerfileは以下の通りとなりました.
FROM node:alpine RUN apk update \ && apk add python make gcc g++ linux-headers eudev-dev \ && rm -rf /var/cache/apk/* RUN mkdir -p /root/pxt-microbit \ && cd /root/pxt-microbit \ && npm install -g pxt \ && echo '{"dependencies":{"pxt-microbit":"0.14.58"}}' > package.json \ && pxt target microbit EXPOSE 80 WORKDIR /root/pxt-microbit ENTRYPOINT ["pxt", "serve", "-h", "0.0.0.0", "-p", "80","--noBrowser"]
ビルドと実行のコマンドは以下の通りです.ビルド時のメッセージにも「+ pxt-microbit@0.14.58」が含まれていました.
$ docker build -t pxt-microbit:alpinev0 . $ docker run -d --rm -p 3232:80 --name pxtav0 pxt-microbit:alpinev0
ブラウザで,http://サーバ:3232 にアクセスすると,数秒待ったあと,ホーム画面ではなく,さっそくブロックエディタの画面になりました.左上の「Projects」をクリックし,次に「サンプル」を押すと,いくつかのサンプルプログラムの中に「Game of Life」が見つかりました.
*1:pxtそのものは,バージョン指定せず,ビルド時の最新版で,問題ありませんでした.