サイレントセレナからコードをコピペしているという話
サイレントセレナからコードをコピペしているという話
えるろだはサイレントセレナからコードをコピペしています。これについて詳しく話していきます。
サイレントセレナってすごいんすよ
サイレントセレナってな~に?
サイレントセレナは silentselene.net にて稼働している現行東方スコアボードです。 このサイトは投稿されたリプレイに対して最終スコアを表示するだけでなく各面についての情報1もでるのです。 実はこれって結構すごいことなんです。
各面終わりの情報を手に入れられることの何がすごいのか
実は永夜抄以降2のリプレイファイルは最終スコアなどのデータはリプレイファイルの末尾にShiftJISでデコードできる形の平文で詰まっています。

ただしこの平文はIT意識の高い人向けにZUNが提供しているもので、ゲームの処理では使用されません。 ゲーム内で使用されるデータはこの末尾データではなくリプレイ内部のデータであり、圧縮されています。よって各面の進行の情報を手に入れるのは通常は困難なはずです。
やべーことしてるなって思って凸った
サイレントセレナのコードは Github にて管理されています。 とりあえずコードを読んだところ次のような処理を行っていました。 まず32th-systemさんが作った tsadecode というものを使ってリプレイファイル全体を圧縮された状態から戻します。 そのあとに Kaitai Struct というバイナリ解析ライブラリの形式に則って書かれた ksyファイル をもとに事前に作成しておいた Pythonファイル をもとにリプレイを解析していました。
自分は tsadecode の関数に使われる具体的な数値の出所が分からず、 ZUNcode というDiscordサーバで一次ソースについて海外ニキたちに聞きました。 しかしどうやら一次ソースはサイレントセレナだったようで、ここからコードをそのまま拝借することにしました。
著作権的に大丈夫なんすか
tsadecode
まず tsadecode について、これはパブリックドメインです。つまり32th-Systemさんは権利を放棄することを表明しているので自由にコードを使うことができます。なので32th-Systemさんに聞かずに勝手にえるろだに組み込むことが可能です。
サイレントセレナのksyファイル
次にサイレントセレナの ksyファイル 群について、これは Apache License 2.0 です。これは大雑把に以下のような制限を守れば勝手にコードを組み込むことができるというライセンスです。
- 勝手に組み込んだことが分かるように、組み込んだポイントに Apache License 2.0 の条文をコピー
- 独自に改造した点があればその旨を表記
- NOTICEファイルがあれば適宜その内容もコピー
- サイレントセレナにはない
上記項目をえるろだは満たしているので自分はサイレントセレナのコードをコピペすることが可能です。
一応OSSライセンスではライセンスの波及という概念があり、組み込んだ場合はそのソフトウェア全体も同一のライセンスに設定しなければならないというものもあります。 これはみんなでコミュニティ全体をより良いものにしていこうという理念によるものです。 みんなでソフトウェアの中身を公開してお互いを助け合えばより良い世界になるはずだという考え方ですね。3
ただし Apache License 2.0 はライセンスの波及という概念がないです。
つまり本来えるろだは Apache License 2.0 にしなくてもよいです。
しかし東方コミュニティに貢献しようという理念4のもと Apache License 2.0 にしています。
まぁ支えあいの世の中ってことっすわ
とはいえ勝手に拝借するだけなのはなんか嫌です。自分もサイレントセレナに貢献しています。 一応日本人として、サイレントセレナの日本語化対応をメインで行いつつ、バグ報告やバグ修正の提出をしていたりします。お借りした分、恩返しできるとよいですね。
まとめ
えるろだがプレイ進行を表示できるのはサイレントセレナの開発者たちのおかげです。 もちろん開発者たちは英語圏の人間なので拙い英語で会話しています。それでも日本人の自分の話に付き合ってくれて本当にありがたい限りです。 これからもお互い東方コミュニティの発展に尽力できるとよいですね。
