競技プログラミングの作問環境構築(wiki設置編)

 みなさんは作問してますか?競プロの問題は誰かが原案作成・テストケース作成・ジャッジ解作成・問題文作成などの作業を行った結果として完成したものです。有志によるコンテストも多く開催されている反面、競プロの作問をやってみたいという方に向けて環境構築のチュートリアルが多くないと感じたので私が書きます。使用したOSはWindows10ですが、他のOSでも大体同じようなことができるかと思います。自分が使ったソフトは紹介しますが、詳しい使い方まではカバーできませんのでご了承ください。

内容が多いので、内容を適宜分割して完成したものから公開します。更新が滞っていたらTwitterなどで催促してください。第1回は「問題原案を集めるwikiを設置しよう編」です。

構成予定

  1. wiki設置(今回)
  2. Slackとの連携(リンク
  3. gitとrimeの使い方(リンク
  4. GitHub Actionsでの自動テスト
  5. コンテスト開催の準備(主に問題文)
  6. コンテスト開催の準備(その他)
  7. コンテスト本番

wiki設置

 まず、基本的に作問は2人以上で行うことになると思うので、問題の原案を共有する場が必要です。Slackなどで管理することも不可能ではないですが、専用のwikiがあると今後の作業もやりやすくなるので、今回はPukiWiki( https://pukiwiki.osdn.jp/ )を利用します。他のwikiの使用は、rimeのプラグインの都合などから考慮していません。また、PukiWikiを設置するサーバーですが、特に他に使う予定がなければXFREE( https://www.xfree.ne.jp/ )が無料なのでオススメです。SSHは利用できず、FTPのみですがPukiWikiの設置に支障はありません。大きなメリットとして、無料でPHPが動かせるという点があるのでお金を掛けたくないならこれがベストでしょう。PukiWikiPHPが動かないと使えませんので。注意点として、XFREEのサーバーは無料ですが定期的に利用更新をする必要があります。後で出て来るのですが、管理パネルには常にログインできるようにしておきましょう。

XFREEのマニュアルスクリーンショットも多いので、適宜参照してください。

 ここからはPukiWikiをXFREEサーバーに設置する作業の手順を説明します。準備として、PukiWikiのダウンロードページからフルセットのUTF-8版をダウンロードしておきます。必要に応じて解凍処理も行ってください。最新版(2020/4/29時点で1.5.3)を使用することを推奨します。また、FTPソフト(FFFTPなど)を用意しておいてください。

 まず、FTPソフトを使う前にPukiWikiの設定を行います。まずはPukiWikiのインストールを参考に、順番に設定をします。基本的に、wikiの記述に従ってユーザー名・パスワードの変更を行います。注意する点はパーミッションの設定です。XFREEが推奨するパーミッション*1は、ディレクトリが「705または755」、htmlファイルは「604」、その他ファイルは「600」です。設定ができれば手段はなんでも良いですが、FFFTPを使って設定するのが楽かと思われます。コマンドとか使わずにできます。
設定が終わったらwikiの動作確認をしましょう。XAMPPなどを使えばローカル環境で動作確認ができます。あまり推奨できませんが、ローカルでテストができない場合はXFREEにアップロードしてから動作確認すれば良いです(アップロードの手順はこれから説明します)。XFREEにアップロードした後に管理者パスワードとかが見えちゃった場合は、必ず権限などを設定し直してからパスワードを変更しましょう。基本的にwikiの閲覧自体にパスワードを設定するので、特に修正する必要はありませんが変更しないのは良くないです(ここまで自分1人で作業を進めている場合は大丈夫だと思います)。

ローカルにPukiWikiが設置出来たら、いよいよサーバーにアップロードをします。その前に必要な設定がいくつかあるので順番に設定していきましょう。
まず、FTPソフトの設定です。XFREE管理パネルのログインページに必要な情報を入力し、ログインをすると管理パネルが表示されます。PHPMySQLサーバーの利用を開始するボタンを押してください。すると、サーバーの管理パネルにログインできます。このページは今後よく使います。サーバー管理パネルと言った時は、このページを指します。サーバー管理パネルにはFTPアカウント設定という項目があるので、そこの記載に従ってFTPソフトの設定をしてください。具体的な操作手順はこちらが詳しいです。
さて、無事FTPの設定ができてもまだアップロードしてはいけません。今のままではサーバーにアップロードした時点で全世界の人間にwikiをいじられてしまいます。そこで、サーバー管理パネルのパスワード制限をクリックしてください。まだ何もアップロードしていない状態では、「現在のフォルダ」へのパスワード制限が無効になっているはずです。これは、ルート以下へのアクセスに制限がないということだと思っています(実はよくわかっていません)。そこで、ログインユーザーの作成とパスワード制限の有効化を行いましょう。
ユーザー設定から新規ユーザーが作成できます。人数分のユーザーを作成しても良いのですが、まあ1つあれば十分です。Slackのprivateチャンネルなどで共有してください。ユーザーを作成したら、有効設定ボタンをクリックです。ここまで設定したらいよいよPukiWiki本体を転送します。
転送は(画像ファイル以外は)「ASCIIモード」で、変換設定は「無変換」で行ってください。PukiWiki側でこうすれば上手くいくように設定されています*2。転送できたら、「http://{あなたのドメイン名}.php.xdomain.jp/」みたいなところにアクセスしてみてください。ユーザー名とパスワードの入力を求められるので、設定したものでログインしてみましょう。上手くいっていれば、PukiWikiフロントページが表示されると思います。お疲れさまでした!これでwikiの設置は完了です。


問題の原案はたくさん出てくると思うので、なんらかのテンプレートを作成することをオススメします。投稿者・ジャンル・難易度などがあると良いと思います。問題原案のページタイトルを「問題/問題名」としておくと、ページ一覧から問題を探しやすくなるかもしれません。#commentとか#articleとか使うと、ソースを直接変更しなくてもコメントが書けたりして便利かもしれません。PukiWikimarkdownで書けるプラグイン*3とかもあるので、wikiの文法が難しいという人は導入してみても良いかもしれません。詳しくはこのへんを見ると分かることがあるかもしれません。



次回は「Slackとの連携編」です