MixJuice コンテンツが現在の独自ドメインを使ってちょうど 1 年になりました。
更に さくらのレンタルサーバ ライト も契約してちょうど 1 年になりました。
1 年経過という事は、請求があったわけで。

ふうせん🎈 Fu-sen.「ブルブルブル…請求怖い~~~😭」
さくらインターネット「1571 円です~~~」
ふうせん🎈 Fu-sen.「えっ、それだけで良いの~~~! 😲」
ジャパンネット銀行「引き落としましたよ~~~」

ジャパンネット銀行から引き落とし

ネット関連は VISA デビット使ってます。25 日が正式な引き落とし日ですが、
24 日に予約をいれているようで、24 日に口座から引き落とされてました。

さくらのレンタルサーバ ライト の年払い 1571 年が無事に引き落とされました。
ライトは一番安いプランですが、現在でも一番高値のサーバ費用だったりします。😆
独自ドメインは数ヶ月前に 2021 年へすべて更新済みでした。

せっかくだから、MixJuice コンテンツをすべて
さくらのレンタルサーバ で使うようにしてしまおうか…… 🤔

主に MixJuice コンテンツで使用していた Google App Engine、
https が HTTP/2 対応になったのですね。
MixJuice の GETS・POSTS が MixJuice 1.2.2 以降になってしまいます。
しかし、この状態はどこのサーバでも発生しているので、
どこのサーバで運用しても良い状況になっていたのです。
MixJuice で古いバージョンでも対応するのであれば、
HTTP/1.1 を継続している http で接続する方法があり、
さくらのレンタルサーバ は http 接続が引き続き可能になっています。

やってしまいましょう! 💻 カタカタカタ…


15j.run - イチゴジャム レシピ MixJuice コンテンツ

15j.run

?"MJ GET 15J.RUN/

プログラム公開と共に追加していていて、
今でも中身が大きい MixJuice コンテンツです。


15jm.li - MixJuice 短縮 URL

15jm.li

?"MJ GET 15JM.LI/

1 文字追加で各 MixJuice コンテンツを参照できます。

4月1日より IchigoJam club を追加しています。
今後増えても良いように最近デザインを修正しました。


m15.lt - IchigoLatte+MixJuice コンテンツ

m15.lt

(JavaScript)
lash>echo MJ GET m15.lt/> uart;cat uart
(Ruby)
lash>echo MJ GET m15.lt/r/> uart;cat uart
(FORTH)
lash>echo MJ GET m15.lt/f/> uart;cat uart

未だに珍しい IchigoLatte 向けの MixJuice コンテンツです。

ベータ版の Ruby と FORTH も対応しています。
Hebi IchigoLatte(Python)も公開されたら対応する予定でいます。
h にしようか、p にしようか、…… 🤔


ij.skr.jp - MixJuice コンテンツサンプル

ij.skr.jp

?"MJ GET IJ.SKR.JP/
lash>echo MJ GET ij.skr.jp/il/> uart;cat uart > .

こちらは別のサーバに設置していたのですが、
これも さくらのレンタルサーバ に引っ越ししました。
URL も変更していて、skr=sakura です。
さくらのレンタルサーバ で使用できるサブドメインを採用しています。

さくらのレンタルサーバ では PHP も使用できるので、
PHP のサンプルもこちらに含めました。


MixJuice コンテンツサンプル は HTML などを公開できる通常のサーバでしたが、
他は PHP を用いて処理していました。

さくらのレンタルサーバでは Apache が動作しているので、
.htaccess や SSI が使えます。
そこで、PHP で処理していた部分を .htaccess や SSI で処理しています。

特殊なところもあるので、紹介しておきます。


Not Found を MixJuice 向けに表示する

ErrorDocument 404 /404.shtml

PHP 処理できないので、SSI にしています。
その 404.shtml はこんな感じ。

'404 Not Found

?"MJ GET ij.skr.jp<!--#echo var="REQUEST_URI" -->

入力された文字を再表示するようにしてあります。


ファイル名がない場合に参照するファイル

DirectoryIndex index

MixJuice は Content-Type を無視します。
なので、拡張子のない index で処理できます。


MixJuice 以外の参照を拒否

RewriteEngine On

RewriteBase /
RewriteCond %{HTTP_USER_AGENT} !MixJuice [NC]
RewriteRule .* https://github.com/fu-sen/15j.run [R=301,L]

MixJuice は User Agent に MixJuice が含まれます。
互換動作の MicJack も MixJuice が含まれてあるので、特別な考慮不要です。
GitHub リポジトリがあるので、そちらに転送してしまう作戦です。
これで robots.txt や favicon などの画像ファイルは不要です。

なお、Apache 2.4 だと <If> を用いて、これでも同じ動作をします。

<If "! %{HTTP_USER_AGENT} =~ /MixJuice/">
    RedirectMatch .* https://github.com/fu-sen/15j.run
</If>

大文字を小文字に変換する

IchigoJam BASIC は通常大文字で使用するので、
大文字・小文字関係なく使用できるようにすると便利なのです。
従来は PHP で strtolower を使っていました。(15jm.li は PHP で処理継続)

.htaccess で処理する方法があるんです。
でもこのように記載する必要がありました。

RewriteEngine On

RewriteBase /
RewriteRule [A-Z] - [E=HASCAPS:TRUE,S=1]
RewriteRule ![A-Z] - [S=28]
RewriteRule ^([^A]*)A(.*)$ $1a$2
RewriteRule ^([^B]*)B(.*)$ $1b$2
RewriteRule ^([^C]*)C(.*)$ $1c$2
RewriteRule ^([^D]*)D(.*)$ $1d$2
RewriteRule ^([^E]*)E(.*)$ $1e$2
RewriteRule ^([^F]*)F(.*)$ $1f$2
RewriteRule ^([^G]*)G(.*)$ $1g$2
RewriteRule ^([^H]*)H(.*)$ $1h$2
RewriteRule ^([^I]*)I(.*)$ $1i$2
RewriteRule ^([^J]*)J(.*)$ $1j$2
RewriteRule ^([^K]*)K(.*)$ $1k$2
RewriteRule ^([^L]*)L(.*)$ $1l$2
RewriteRule ^([^M]*)M(.*)$ $1m$2
RewriteRule ^([^N]*)N(.*)$ $1n$2
RewriteRule ^([^O]*)O(.*)$ $1o$2
RewriteRule ^([^P]*)P(.*)$ $1p$2
RewriteRule ^([^Q]*)Q(.*)$ $1q$2
RewriteRule ^([^R]*)R(.*)$ $1r$2
RewriteRule ^([^S]*)S(.*)$ $1s$2
RewriteRule ^([^T]*)T(.*)$ $1t$2
RewriteRule ^([^U]*)U(.*)$ $1u$2
RewriteRule ^([^V]*)V(.*)$ $1v$2
RewriteRule ^([^W]*)W(.*)$ $1w$2
RewriteRule ^([^X]*)X(.*)$ $1x$2
RewriteRule ^([^Y]*)Y(.*)$ $1y$2
RewriteRule ^([^Z]*)Z(.*)$ $1z$2
RewriteRule [A-Z] - [N]
RewriteCond %{ENV:HASCAPS} TRUE
RewriteRule ^/?(.*) /$1 [L]

検索してみると、もっと短いものが出てきますが、

  • httpd.conf に記載 → レンタルサーバなので不可能
  • 転送処理される → MixJuice が対応していない

という事でこの方法になりました。


URL に関係なく index.php を実行する

15jm.li は細かく PHP 処理を行うようにしていたので、
Google App Engine を引き継いで index.php を必ず動作するようにしました。

RewriteEngine On

RewriteBase /
RewriteRule .* /index.php [L]

関連して、次の記載はよく見かけるかと思います。

RewriteEngine On

RewriteBase /

RewriteRule ^index\.php$ - [L]

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* /index.php [L]

行毎で説明すると……

RewriteRule ^index\.php$ - [L]

URI に index.php があるのでそのまま処理します。
そのようなケースがないので含めていません。

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

ファイル・ディレクトリが実在している場合、対象外となります。
必ず index.php を実行させたいので、これも含めていません。

RewriteRule .* /index.php [L]

何か文字があれば index.php を処理する、という記載です。


ファイルのアップロード

もう一つ さくらのレンタルサーバ を使うのを保留していたのに、
ファイルのアップロードが FTP というのがあります。
セキュリティは FTPS、ライト以外だと SFTP も使えるので問題ないのですが、
ファイル単位でのアップロードなので、同期の点が問題なのですね。

でも GitHub で管理しているのであれば、Git-ftp が使えます。

さくらのレンタルサーバだとこんな感じです。

git config git-ftp.url "ftpes://ユーザー.sakura.ne.jp/www/フォルダ/"
git config git-ftp.user "ユーザー"
git config git-ftp.password "パスワード"
git ftp init

FTPS(FTP Over SSL)には ftps と ftpes があり、
さくらのレンタルサーバは ftpes Explicit モードが有効です。
ftpes を ftp に変更しても動作しますが、
暗号化転送される ftpes を使いたいところです。
sftp は ssh 接続でライト以外のプランが有効です。

git ftp init で現在の最新状態に同期されます。
あとは git push でコミットした後に

git ftp push

でサーバへ反映できます。

ライト以外のプランであれば、ssh が使えるので、
Git リポジトリをサーバに作って、Git hook で pull するとかもできますね。


こんな感じに PHP で処理していた部分を .htaccess などで置き換える事ができ、
さくらのレンタルサーバ へ MixJuice コンテンツ を移行できました。

さくらインターネットは IchigoSoda という IchigoJam 互換機を制作しています。
sakura.io を接続して通信できる仕組みです。IchigoJam との接点があるんですね~。

IchigoJam 関連をさくらインターネットのサービスで提供するのは、
アリだな~と思っています。


追加 2020/05/04

「大文字を小文字に変換する」ですが、
Rewrite の制限はデフォルトで 10 回までになっていて、
これをこえるとサーバーエラーになってしまいます。(無限ループ対策)
httpd.conf ではこの制限を変更できるのですが、
.htaccess では変更できません。

15j.run が階層が深く、実際にサーバエラーが発生していたため、
PHP による小文字変換処理に戻しました。
結局 Google App Engine 動作同様 index.php を必ず PHP 処理するようにしています。

ただし、Google App Engine では www/ 下にコンテンツを置いていたのですが、
コンテンツの構成がわかりやすいように
さくらのレンタルサーバ への変更でルート直下にしています。


追加 2020/05/06

上の PHP 対応は m15.lt も行っていたのですが、
ディレクトリが r・f のみで、d/ファイル名 になるので、
.htaccess での小文字変換にしています。
PHP を動作しない方がサーバ負荷が減る事が期待できます。

m15.lt は IchigoLatte 向けですが、IchigoLatte は小文字メインなので、
変換が通常発生しない、というのもあります。


追加 2020/05/12

伝言板・時差チャットを当初ここに含めて紹介していましたが、
サーバ負荷の考慮から、実際に BBS を運用しているサーバへ移しています。