あーさーの備忘録

ゆっくり自由に生きてます

個人的 Best Hit 2019

予定を変えて年末っぽい記事を書きます。とはいっても、今年聞いた好きな曲を列挙していくだけです。

余談

僕はYouTube Premiumをサービス開始時から利用しているのですが、最近学割の存在を知りました。普通に加入するより42%も安いみたいです。

SheerIDという認証サービスを利用して学生であることの証明をするのですが、弊学()の学認システムは対応していないようでした。途中でエラーになってしまいます。仕方ないので学生証の写真を送りました。

最近のYouTubeは広告2回流れるらしいですね。さすがに課金しないとやってられません。

本題

今年たくさん聞いた曲を列挙していくだけです。音楽評論家ではないのでまともなコメントはしません。

ダンスが僕の恋人 / 東京ゲゲゲイ

カワサキハロウィンのパレードで聞いてハマった。ズットスキナヒト、Sense of immoralityあたりも好き。


東京ゲゲゲイ「ダンスが僕の恋人」| Tokyo Gegegay Music Video

黒い羊 / 欅坂46

小池美波が最高。あと最後のてち。角を曲がるがアルバムに入るのを期待して待っていたら、2日前にネット配信された。


欅坂46 『黒い羊』

白日 / King Gnu

最近のドラマの曲どれも良い感じ。


King Gnu - 白日

就寝御礼 / PSYQUI

中盤の転調が良い。ヒステリックナイトガールも良曲。


就寝御礼

Official髭男dism - Pretender[Official Video]

歌詞がブッ刺さる。


Official髭男dism - Pretender[Official Video]

まちがいさがし / 菅田将暉

某高校のフォークソング部に訪問した時にこの曲を演奏してた。


菅田将暉 『まちがいさがし』

チルドレン / BIN

Just the two of us進行エロすぎる。


BIN - チルドレン(MV)

公然の秘密 / 椎名林檎

PV出た瞬間これは踊れるようになろうと思って練習してたら、即教則ビデオ出て感動しました。


椎名林檎 - 公然の秘密

桃源郷とタクシー / Mega Shinnosuke

18歳の曲のPVではない。


Mega Shinnosuke - 桃源郷とタクシー (Official Music Video)

ノーチラス / ヨルシカ

いくつかの曲で1つのストーリーになっているっぽい。


ヨルシカ - ノーチラス (OFFICIAL VIDEO)

FLY AGAIN 2019 / MAN WITH A MISSION

四つ打ち嫌いとか普段言ってますが本当はめちゃくちゃ好きです。


MAN WITH A MISSION 『FLY AGAIN 2019』

幽霊東京 / Ayase

不勉強を恥じてボカロもそこそこちゃんと聞くようになりました。


幽霊東京 / Ayase (self cover)

まとめ

全体的に落ち着いた曲が多くて趣味が変わってしまったなぁと思っています。自分の趣味全開ですがよかったら聞いてみてください。

LINE DEVELOPER DAY 2019で、"Learning Session"を体験してきた

こんにちは、23歳になったArthurです。この歳に両親は5歳の僕を幼稚園に行かせていたと思うと衝撃的だなぁと改めて思います。

LINE DEVELOPER DAY 2019

自分の誕生日に開催される大規模なテックカンファレンスがあるということで、2019/11/20(Wed.)〜21(Thu.)の2日間に行われたLINE DEVELOPER DAY 2019に参加してきました!

本イベントの全体レポートは後日余裕があるときに書きますのでお楽しみに。今回の記事は、その中で行われたハンズオンの参戦記になります。

linedevday.linecorp.com

f:id:arthur_teleneco:20191124055144j:plain

What's "Hands-on"?

そもそも「ハンズオン」とは何なのでしょうか。Google先生に聞いたところ、「実践の、実地の」という意味とのこと。つまり、LINEで使われている技術を実践的なワークショップで学べる企画のようです。

今回は自分の予定と興味をハンドブックと照らし合わせ、伊藤宏幸さんによる「仕事をよりクリエイティブにするための「Learning Session」の実践」に参加してきました。

What's "Learning Session"?

会場に入って見えたのが以下のスライドです。バックでアニソンが流れているのに気になりますが。

f:id:arthur_teleneco:20191124060216j:plain

ラーニングセッションとは、社内で行う勉強会のスタイルのようです。以下にその特徴を挙げます。

  • 30〜60分/日で毎日やる
  • 業務時間中にやる
  • 日々の仕事に関するどんなトピックでもOK
  • モブプログラミングの手法を使用する
  • 批判はせず、楽しむ

実際の流れとしては、トピックを選んだ後、6〜7人でチームを作り、モブプログラミングの方法(すなわち、PCを1台だけを使用)で学習していきます。

1. Decide Team

まずはトピックとチーム決め。宿題として学びたいトピックを決めてくるよう案内がありました。参加者から、PythonやDocker、Kubernetesなどの技術トピックが挙げられました。

私はCircleCIのチームを選びました。自分が趣味で作っているWebアプリはだいたい手動デプロイだからです。そろそろちゃんと自動化したいなと思いセレクト。

このチームには4人集まりました。私を含め3人大学生、もう1人の方も私と同じ年だったので、年代はみな同じぐらいです。まぁこの年だったら普通社会人やってるよな……と現実を突きつけられ少し悲しくなりました。

2. Decide Objective

チームが決まったら次は目的を決めます。私たちは「Webアプリケーションのテスト・ビルド・デプロイをCircleCIで行う」ことを目標としました。

具体的に学習する内容は以下に挙げる通りです。

  • CircleCIにユーザ登録
  • 他のCIツールとの違い
  • CircleCIのConfigurationファイルの書き方

3. 1st Round

ここまで決まったので、いよいよ1st Roundスタート。今回はラウンドを2つに分け、それぞれ40分で行います。

CircleCIの特徴

今回は私のPCとアカウントを使うことに。私がGitHubリポジトリを作っている間に、他のメンバーにCircleCIの特徴を調べてもらいました。

  • SaaS型のCI/CDサービス
  • できること
    • Build
    • Test
    • Deploy
  • メリット
    • 環境構築コストが低い
    • 運用コストが低い
    • configファイルがYAML
  • デメリット
    • 使用量に比例した料金
    • リアルタイムにビルド実行できない

SaaSというのは、提供者側で稼働させるサービスのようです。Jenkinsなどは自前で建てるのに対し、CircleCIはクラウド上で実行します。

Webアプリ作成

Vue.jsでサンプルアプリケーションを作り、リモートリポジトリにpushします。

vue create linedevday19-circleci
cd linedevday19-circleci/
npm run sevre
git remote add origin git@github.com:Arthur1/linedevday19-circleci.git
git push -u origin master

CircleCIの設定ファイル

ここまでできたらやっと本題に入れます。CircleCIがリポジトリにアクセスできるように設定した後、早速 .circleci/config.yml ファイルを作成していきます。テンプレートとしてNodeを選択していたので、ブラウザに表示された設定ファイルをコピーし、Linterを動かすスクリプトを下に追記しました。

# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
jobs:
  build:
    docker:
      # specify the version you desire here
      - image: circleci/node:10.15.3

      # Specify service dependencies here if necessary
      # CircleCI maintains a library of pre-built images
      # documented at https://circleci.com/docs/2.0/circleci-images/
      # - image: circleci/mongo:3.4.4

    working_directory: ~/repo

    steps:
      - checkout

      # Download and cache dependencies
      - restore_cache:
          keys:
            - v1-dependencies-{{ checksum "package.json" }}
            # fallback to using the latest cache if no exact match is found
            - v1-dependencies-

      - run: npm install

      - save_cache:
          paths:
            - node_modules
          key: v1-dependencies-{{ checksum "package.json" }}

      # run tests!
      - run: npm run lint 

ここで、working_directoryとは何だろう、という疑問が生まれました。困っていそうな雰囲気を、伊藤さんの他にもう1人いらしたLINEの方に察知していただき、一時ファイルが置かれる場所だと教えていただきました。危うくビルドファイルの置き場/distを指定するところでした。

疑問が解決したところで設定ファイルをcommitしてpush。CIが完了するまで数十秒沈黙。すると、見事CircleCI上でLinterが動きました。チーム内に歓声が上がります。

f:id:arthur_teleneco:20191124065444p:plain

ちょうどよいところで40分経過、1st Round終了です。

4. Break

休憩、というより作戦会議タイムです。最初に立てた予定通り順調に進んでいることを確認し、2nd Roundではデプロイまで進むことにします。

ここで、チームメンバーにZeit Nowというサービスがあることを教えてもらいます。静的なWebアプリケーションを手軽にデプロイできるもののようです。最初はGitHub Pagesにデプロイするのかな〜と考えていましたが、せっかくですのでNowを使用することに決めました。

5. 2nd Round

Nowの準備

まずNowにユーザ登録します。GitHubと連携することで手軽に登録できました。そして、NowのためにCLIツールを導入します。

npm install -g now
now login

これでnowコマンドが使えるようになったはずなのですが、なぜかbash: now: command not foundと表示されます。そういえばnodenvを導入したときに、globalのnode_modulesにパスを通し忘れていました。仕方ないので今回はフルパスでnowコマンドを実行しつつ、後日export PATH=$PATH:`npm bin -g`.bash_profileに追加しました。

NowをCircleCI上で実行

nowでdeployするコマンドnow --prodをnpm経由で実行するよう、CircleCIの設定ファイルに追記してpushしたのですが、思わぬ落とし穴に。

f:id:arthur_teleneco:20191124072502p:plain

NowのメールアドレスとパスワードをCIのコンソール上で聞かれていますが、答えようがありません。

調べたところ、トークンを取得し、環境変数を利用してコマンドオプションに追加することで解決するとのこと。NowのDashboardからトークンを取得し、CircleCIの環境変数に追加します。

f:id:arthur_teleneco:20191124072938p:plain

npm runにCircleCIの環境変数を渡せるかよく分からなかったので、node_modules/.bin/now -t ${NOW_TOKEN} --prodとnpmを経由しない形でCircleCIに実行させます。

結果は無事成功!サンプルWebアプリをパブリックに公開することができました!

f:id:arthur_teleneco:20191124073736p:plain

f:id:arthur_teleneco:20191124073543p:plain

感想

お互い初めて会った同士でここまでスムーズに勉強会ができるのは感動的でした。モブプログラミングは、なんでも自分でやりたがる私にとって少々つらいものでしたが、チームメンバーの能力を知り、お互いを向上させていく仕組みとして非常に有用であることを知りました。伊藤宏幸さん、チームメンバーのみなさん、ありがとうございました。

次回はlinedevday全体のレポートの予定です。

SECCON Beginners 2019 東京 Write-Up

熱が冷める前に書いたので文章が煩雑かもしれません。ご容赦ください。

2019/10/5(土)に行われたSECCON Beginners 2019 東京に参加してきました。

内容としてはWebとリバースエンジニアリングに関する講義を受けて、その後演習としてミニCTF大会が行われるというものでした。この記事はこのイベントの体験記になります。

先に結論を話すと、参加者のレベル幅が広いな、という感想です。1位の人とか絶対ビギナーじゃないでしょ。参加者の現状のスキルによって、本イベントに対する目線がかなり変わってくると思うので、先に私の個人情報について書いておきます。

私のスペック

前準備

Kali Linuxvmを導入するよう案内があったので、virtualboxを利用して入れました。ところが、僕のMacBook Air 2018にはスペック的に若干厳しかったみたいです。アプリケーション一覧のアニメーションが上手く動作せず、描画が重なってしまいます。軽量化のためにいろいろ試したんですが、当日寝坊しては本末転倒なので断念。

f:id:arthur_teleneco:20191005232954p:plain

f:id:arthur_teleneco:20191005233002p:plain

講義

Web

XSSに焦点を絞っていたのは良かったと感じました。Webがどのような仕組みと決まりによって閲覧できるのか、という基本知識があれば十分理解できる分量だったと思います。最近はCSP(Content-Security-Policy)関連の問題がよく出ているというお話も聞けました。Web系の常設CTFは古いものも一定数あり、比較的新しい仕様が登場しないこともあるので、勉強は怠れませんね。

個人的に一番「なるほど」と感じたのは、「攻撃対象となるユーザをいかに誘導するか」が重要、という話です。XSSできるから危ない!脆弱性がある!という短絡的な思考ではダメだな、と反省しました。ここが崩れると何のためにCTFしているかわからなくなります。

この部分に非常に感銘を受けただけに、気になったことが1つだけあります。XSS悪用の流れの図が分かりにくかったです。XSSを起こす部分と、XSSによって作った落とし穴にどう誘導するかの部分で分ける、とか、なんか上手い方法があるのでは、と素人ながら思っています。

リバースエンジニアリング

講義資料は圧巻の181ページ。ページ数が多いため、超特急で進むのでは、と不安でしたが、講義資料をゆっくり見ながらであれば、講義の内容に追いつけるスピードでした。アセンブリの命令の説明など、リファレンスのような形で使える部分が多かったのでページが多かったんですね。個人的には嬉しいです。大事にします。

大事だな、と思った内容は、リバースエンジニアリングに3つのレイヤーがあるということです。stringsコマンドなどで手軽に行う表層解析、逆アセンブラしたコードを読み解く静的解析、実際に動かしながらレジスタの値などの挙動を見る動的解析の3つです。今までなんとなく手探りでやっていたのですが、作業の見通しがはっきりしました。

少し話が飛びますが、アセンブリ言語はやっぱり人間には読みづらいと思います。大学の某講義のTAが「アセンブリは単純!十分読める!」と言っていましたがそんなことないと思います。各命令が省略されているだけで結構ダメです。lea ならload effective addressとか、覚えるのにはまだまだ時間がかかりそう。レジスタ名も普通に分かりにくい。

そこを少しでも解消するために、今回の講義ではIDAというツールを使用しました。分岐がGUIで見えるようになっているのは良いですね。デフォルトでつけられた変数名も自由に変えられるのには感動しました。

演習

ここからが本当の意味でのWrite-upですね。演習の結果は1400ptで8位でした。3位までに入ると賞品がもらえるとのことで、張り切っていましたが入賞ならず。残念です。

f:id:arthur_teleneco:20191005233235p:plain

(上の写真は最終段階ではありません。この後rev2aも解けました。)

解放メモを、だいたい解いた順に載せていきます。が、問題にもうアクセスできない状態で書いているので結構うろ覚えです。ごめんなさい。

welcome [Misc, 100pt]

実は「てけいさんビギナーズ」から解こうと思ったのですが、問題へのリンクが見つからず、スコアサーバーのHTMLを眺めていました。そのときにたまたま見つけたのがチュートリアル問題のflagです。

ビギナーズカンパニー [Web, 200pt]

XSS脆弱性があったので、scriptを埋め込みrequestbinに誘導。リクエストのcookieにflagがある、という講義通りのシンプルな問題でした。

alertme [Web, 100pt]

タイトル通りですね。適当にalert文書いて埋め込んだらflagのalertに置き換わっていました。これどういう仕組みだったのか見ておけばよかった。

この問題を解いたタイミングでは2位だったみたいです。

Can you still do XSS? [Web, 300pt]

Webの講義では時間が足りずCSP関連の演習ができませんでした。この問題はその演習問題ほぼそのまま、という感じでした。Content-Security-Policyselfが設定されており、単純にscriptタグを埋め込んでも動作しません。以下の流れで解きました。

  1. requestbinにリクエストを投げるJavaScriptのコードで記事を作成
  2. 1.の記事のraw textをscriptタグで読み込むような記事を作成
  3. 2.の記事に巡回者がアクセスするとrequestbinにflagが届く(cookie)

実際のサービスでわざわざraw textとして表示する機能はなさそうですが、テキストファイルとしてpublicな場所に保存してしまっていた、などの事例はあるかもしれません。

てけいさんビギナーズ [Misc, 100pt]

見覚えがあるタイトルなのはさておき。ページを開くと、足し算の式と、答えを入れるフォームが。正しい答えを150回入れるとflagが手に入るようです。数弱の私は当然自動化します。

私のChromeにはTampermonkeyを導入しているので、好きなページで自分が書いたJavaScriptを実行することができます。以下のスクリプトを実行するようにしました。

(function() {
    function safeEval(val) {
        return Function('"use strict";return ('+val+')')();
    }
    if (document.getElementsByTagName('h3')[0].textContent == '現在の正解回数 : 150') return false;
    var siki = document.getElementsByClassName('a')[0].parentElement.textContent;
    document.forms[0].answer.value = safeEval(siki);
    document.forms[0].submit();
})();

演算対象の2つの整数の要素には.a .bとclassで名前がついていました。最初は足し算しか出てこないと思っていたので、この2つの要素のinnerTextを取得し足し合わせていたのですが、途中から引き算に……。しかも演算子の部分は独立した要素ではなかったので、取り出すのが結構面倒。そこでこのような形に落ち着きました。作問者結構いじわるですね。

この問題は「てけいさん」で解くことも可能です。もしそれを防ぐなら、一定時間内に送信しないとアウト、という実装を作問者がすればよいのです。でも、そうしないということは、「てけいさん」も意味のない行為ではない、ということだと思います。1位の人も手計算で頑張っていたようですからね。

restricted ビギナーズカンパニー [Web, 200pt]

考えすぎて全然解けなかった問題。「ビギナーズカンパニー」と見た目は同じですが、scriptという文字が入っていると弾かれてしまいます。

解法としては、imgタグのonerror属性を利用することで突破可能です。

最初は昔みつけた( https://arthur.hateblo.jp/entry/2018/05/27/185550 ) meta refreshを使ってやろうとしましたが、cookieにあるflagが見れませんでした。他にも、同じ内容で違うactionのフォーム要素を埋め込んだりなど、色々模索して失敗していた気がします。

rev1a [Reversing, 100pt]

バイナリファイルが渡されたので、とりあえずfileコマンドとstringsコマンドを使います。今回の趣旨的にはfileコマンドはいらなかったかもしれませんが。stringsからflagの断片を得たので連結しましたが上手く行かず。IDAも使って眺めていたら、delimを挟んで連結していることが分かりました。中身は_だったので、これでつないでflagを得ました。

rev1b [Reversing, 150pt]

こちらもstringsでflagの断片が出てきました。意味が通るように断片を並び替えたら通っちゃいました。

rev2a [Reversing, 150pt]

2とあってさすがにstringsで分かるような問題ではありません。IDAで静的解析。

input_codecheck_codeという、イカニモな関数を発見。check_codeの中身を見ると、入力した数字と、16進数の6AAC52E...を比較して、等しかったらCorrect!と出るようです。そこでこの16進数を10進数に変換するのですが、ここで悲劇が。この変換がうまくいきません。ネットで適当に調べて出てきたツールを使って答えを出しましたが、得られた数字では通りません。仕方なく手計算しましたが普通に間違えました。原因はコピペミスです。つらいです。しかも、IDA上で右クリックしたら変換できました。

f:id:arthur_teleneco:20191006002719p:plain

初めてReversing問題自力でまともに解けた気がします。これだけで来た価値がありました。それに、終了2分前に通した問題。諦めないの大事ですね。

ちなみに、この問題は演習解説会のときに解説しました。「解けた人手を挙げて」と言われたので手を挙げたら、話すことになってしまいました。Webならもう少し流暢に解説できた気もします。心残りですね。

まとめ

個人的にはReversing解けたので来て良かったです。万人にウケるイベントは無理ですが、もう少しターゲットが明確に絞れるともっと良いなぁと感じました。Beginnerが広すぎるんですよね。本当の初心者はそもそも未経験なので、過去の大会成績などの数値指標を持っていないところも厳しい。

あと私はコミュ障なので交流会が少し辛かったです。劣等感で押しつぶされそうでした。みなさんどうしてそんなに話せるのでしょうか。もちろん交流会は参加必須ではないですが、特に用事がないのに早く帰るのもアレですよね。帰り道に花火大会帰りのカップルと遭遇したのもあってダブルパンチで傷心中です。悲しすぎてセッターカートンやけ買いです。

ぶらつき学生ポータルをリニューアルしました

本記事はぶらつき学生連盟Blogの2019/05/03の記事「ぶらつき学生ポータルをリニューアルしました」 (https://blog.buratsuki.work/?p=68)の転載です。

お久しぶりです。3人目愛人からの君主が上手く決まって気分がいいArthurです。3月4月と体調が悪くなかなか外に出られなかったため、あまりアグリコラができておりません。が、その代わりにアグリコラ関連のツール開発に時間を割くことができました。

今回は、新しく生まれ変わった「ぶらつき学生ポータル」について書き記しておきます。

開発概要

開発のきっかけ

前バージョンのぶらつき学生ポータルは、2017年〜2018年の年末年始に、テレビ特番を見ながら1ヶ月弱で作ったものです。そのため設計が甘く、その後の機能拡張時にかなり苦しい思いをしました。

ぶらつき学生連盟でリバイズドエディションも遊ばれるようになったため、この機会に、と思い1から作り直すことにしました。

前バージョンからの改善点

パフォーマンスの向上

バックエンド・フロントエンドともに高速化させました。その結果、AuditのPerformanceカテゴリで満点の100点をいただきました。その他の項目でも基本的に満点を目指しました。(Accessibilityは使用しているCSSフレームワークの関係でこれが限界)

f:id:arthur_teleneco:20190929104222p:plain

デザインの一部変更

パンくずリンクを用いたり、フラッシュメッセージをトーストにしたりと、細かいところがスタイリッシュになっています。

f:id:arthur_teleneco:20190929104240p:plain

リバイズドエディション

リバイズドエディションのカードにも対応しました。相変わらずカード効果はすべてデータベースに手打ちですので、間違っている箇所があるかもしれません。私までご指摘いただけますと幸いです。

一度入力した戦績の更新が可能に

これはユーザーでないとわからない改良点ですが、一度送信した戦績をあとから編集できるようになりました。逆に言うとこれまではそれができなかったということです。間違えた入力があったら、私がいちいちデータベースにアクセスして直接変更していました。

感想

これだけの規模のWebアプリケーションを一人で作るのはやっぱりしんどいです。コーディングはさておき、合計1700枚以上のカードマスタデータの手打ち作業とか、誰でもできそうな作業に時間を費やすのは精神的に参りました。こういう単純作業は誰かに任せたいところですが、サーバー維持費などは全部自分で持っていて、かつ広告なども置いていません。つまり、このサービスを運営しても赤字でしかなく、人を雇う資金はありません。投げ銭待ってます。

最後のPR

これだけ苦しい思いをして作った「ぶらつき学生ポータルRevised」ですが、実は残念ながらあまり使われておりません。アグリコラが立たないのです。1週間に1回立つか立たないかのゲームにここまで時間と金を投資するのは勿体ないのです。

このツールを作った最大の目的は、拡張アグリコラを攻略するためのデータを集めることです。人狼アグリコラ部さんが出版した「アグリコラ理論」の最後の方に、確かアグリコラ1000戦の統計データが載っていたと思います。どのように集計したのかは分かりませんが、手書きにしろExcelにしろ、入力も集計もしんどいのではないでしょうか。そういった問題を解決するために作ったのがぶらつき学生ポータルです。それなのに、アグリコラが立たないせいでデータが全く集まらない。本末転倒じゃねえか。

そこで、私からこの記事を読んでいるみなさまにご提案です。本ツールをみなさんのコミュニティで運用してみませんか?特に拡張アグリコラをやっている大学のボドゲサークルさんとか!!データを私の個人的研究に使わせていただけるのであればこちらが費用を持ってサーバー建ててもかまいません。拡張デッキに対応しているだけで、旧版EIKしかやらないという方たちにも機能的には申し分ないと思います。ご相談は私のTwitter(@arthur3864)*1のDMにでもどうぞ。

ちなみに、本ツールのソースコードGitHubに上げてあるので、知識とサーバーさえあれば勝手に運用できると思います。サポートはできませんが、そういうのにお強い方はぜひチャレンジしてみてください。あ、マスタデータはないけど。

*1:本アカウントは削除しました。新アカウント@Arthur1__

WordPressでクローズドなWebサイトを作ろう

かれこれ丸一年以上ブログでのアウトプットを怠っていました、Arthurです。心身共に不調を極めています、とても苦しい毎日です。生き地獄という感じです。

一応Webアプリ開発などは続けていて、GitHubに上げているので、気になる人は見てください。こちらでも、近い将来紹介します。

github.com

WPでクローズドなWebサイトを作ろう!

さて、本題です。WordPressは今まであまり使ってこなかったのですが、CMS希望の案件がいくつかあったので遊んでいました。

そこで、私が所属している団体向けにクローズドなWebサイトを作ることにしたのです。メンバー各人にアカウントを発行して、そのメンバーだけがログインして参照できるサイトです。イメージとしては、どのページでもログインしてなかったらWordPress標準のログインページに飛び、ログイン後見たかったページが参照できるという感じです。未ログインユーザに見せるパブリックなページはログインページのみという想定です。ユーザごと別々の会員ホームページみたいなものはありません。

ところが、やり方がよくわかりません。少なくともバニラの状態ではできないようです。Google先生に聞いていろんな方法が見つかったので説明していきます。

Basic認証(WP BASIC Auth)

ja.wordpress.org

BASIC認証を導入するプラグインがいくつか見つかりました。たとえば、WP BASIC Authは、WordPressのユーザ情報と同じものでBASIC認証ができるらしいです。そもそもプラグイン入れなくても.htaccessなりserver.confなりに書けばなんとかなりますが、WordPressのユーザ情報をそのまま使えるのは嬉しいですよね。

ただ、今どきBASIC認証のポップアップが出てくるのは正直ダサいです。また、このプラグインに限った話ですが、最終更新が2015年あたりで止まっているようですWordPressは定期的にアップデートしているので、ちゃんと動くのでしょうか。セキュリティ面も心配ということで今回は採用しないことに。

BASIC認証ってデフォルトのパスワード最大長が8文字ですが、このプラグインではそれ以上も対応しているのでしょうか。気になりますが、ブロガーでもYouTuberでもないので検証はしません。ごめんなさい。

User Access Manager

ja.wordpress.org

次に紹介するのは、WordPressに本格的なアクセス権限管理機能を持たせるプラグインです。機能一覧から抜粋すると以下の通り。

  • ユーザーグループ
  • 閲覧者と、編集者の区別
  • ユーザーグループに基づいたアクセス権
  • アクセス権がない場合に、特定のページにリダイレクトさせる

読んだ感じ、私の掲げる要件を満たしているような感じがします。しかし、使ってみた感想としては、設定が煩雑すぎてWordPress初心者の私には厳しかったです。各ページごとのアクセス制限ができて細かいところに手が届くのですが、トップページのアクセス制限の方法が分かりませんでした。トップから他のコンテンツに遷移するときにはじめてログインページに飛ばされます。これでは今回の要件を満たせません。このサイトやコンテンツの存在自体を隠したいので、トップページ丸ごとアクセス制限を掛けたいです。

きっと私の要件を満たす使い方はできるのでしょうが、設定の方法がわからない以上どうしようもなく、不採用。テーマ書き換えたりすればいけそうだけど、そこまでする気力はありませんでした。

Password Protected

ja.wordpress.org

設定するのはパスワード1つとお手軽な感じなのが魅力です。今回はユーザを識別したいので採用しませんが、これくらい手軽で良いサイトなら十分使えそうだと感じました。ちなみに、画像やアップロードしたファイルは保護の対象外とのこと。

他にも、ページ内の一部の内容だけ隠すプラグインなどが見つかりましたが、Google検索による日本語の記事では、それらしい情報を得ることはできませんでした。

My Private Site

ja.wordpress.org

半ば諦めつつ、WordPressプラグイン検索ツールで、英語でそれっぽい単語を入れていたら、My Private Siteというプラグインに出会いました。

Allows the Administrator to restrict a WordPress-based web site to viewing only by registered users who are logged on. Any attempt, by anyone not logged, to view any Page, Post or other part of the site will display a WordPress login screen.

それっぽいことが書いてあるので導入して設定を弄ります。これが今回の要件にピッタリなプラグインだったのです!

My Private Siteの紹介

インストール

ダッシュボードから、「プラグイン」→「新規追加」→検索窓に"My Private Site"で一番上に出てくるものを「今すぐインストール」→「有効化」で終わりです。どのプラグインも流れは同じなので、画像つけて事細かに説明はしません。

有効化すると、ダッシュボードの「設定」に「Private Site」が追加されます。

設定

設定を開くとわかりますが、このプラグインは日本語対応していません。英語ですが平易なので問題ないと思います。

有効化しただけでは実は本機能は有効になっていません。下のチェックボックスにチェックを入れて「Save Changes」を押すと、一瞬でクローズドサイトの出来上がりです。細かい仕様も弄れますが、今回の要件的にはこのままで問題なし。

f:id:arthur_teleneco:20190922210840p:plain

運用

見るだけのユーザには権限を「閲覧者」としてアカウントを発行します。閲覧者はダッシュボードを見る必要がないと思うので、無効化しておくと良いですね。管理者や編集者も、いちいちログインリンクを踏まなくても強制的にログインに飛ばされるので、クリック数が減っていい感じです。

まとめ

クローズドなサイトを作るには「My Private Site」というプラグインが良いよ、というお話でした。実はこのプラグインに関する日本語のブログ記事が全く見つからなかったんですよね。ブログネタにするのにちょうど良いと思って書いてみました。

ラスト海浜教室

海浜教室

僕の出身高校の1年生がこの時期に行う海浜教室に助手として参加し続けて今年で4回目になりました。現役の頃自分で行ったのを含めて全部で5回も行ったんだなぁと一人で感動しています。せっかくなので振り返ってみます。

第56回(現役)

僕は死ぬほど運動神経が悪いので現役時はE班だった。あの頃は学校の50mプールの半分も泳げなかったし、行きたくないなぁと思っていた。

実際行ってみたけど、現役時嫌いだった行事ランキングダントツの1位だった。2日目3日目雨だったし死ぬほど寒かった。このときはスマホゲームetc一切持ち込み禁止だったので、個人的な思い出の写真も撮れないししんどかった。E班には当時助手はいなかったので他の班が楽しそうにやってるのを羨ましそうに見てた。他にE班誰がいたか全く覚えてないぐらいに影が薄かった。スローガンが「恋海」なのに個人的には恋の要素の一欠片もなかった。

強いて言うなら記念歌づくりが楽しかった。記念歌係メンバーで集まる場所がなくて駅近くの公園でキーボード持って作曲してたら宗教勧誘にあったのを覚えてる。あと、食事のときに水こぼして担任にありえん怒られたのが面白かった。

第59回(助手1年目)

それから3年後、無事大学生になれたので助手として参加した。あれほど海浜教室が嫌いだったのになぜ来ようと思ったかはもう覚えてない。一応現役時の海浜のおかげでそれなりには泳げるようになっていたけれども。

担当だった女子D3は同期の妹etc知り合いが多くて接しやすかったのがよかった。この年は台風が接近していて泳げなかったので、やることはそんなになかった。適当に演劇同好会のときにやってたゲームをやったらそこそこ盛り上がった。泳がずに体力が有り余ったせいでいろいろ問題もあったけれど、それはそれで楽しかった。

第60回(助手2年目)

スマホを家に忘れる大失態をしたので写真がない。ほんの少し金髪残ってた時期だった。女子E班担当。海にすら入れない子もいたけれど、最終日に足のつかないところまで行けたので、みんなの成長にただただ感動した。この年はFDに混ざれたので楽しかった。FDは現役のときから大好き。部活の後輩の妹にその場のノリで「似てる~」とか言ったけど全然似てなくて3秒後に謝った。

海浜前も少し体の調子がよくなかったが、海浜から帰ってきてから体調が急変してしばらく寝たきり生活になってしまった。喉が腫れて呼吸困難になって入院した。

第61回(助手3年目)

4月まで入院していて体も動かず寝たきりの状態が長く続いたので、海浜来れるか心配だったけれど、なんとか通院時を除いて通常の生活に戻ることができた。

だいぶジェネレーションギャップを感じた。この時の1年生はみんな21世紀生まれということに気づいた。今回も女子E班だった。3年目だし大分慣れたと思っていたけれど、訓練の時間管理がうまくいかなくて大変だった。端的に言って時間が足りない。でも、助手として同じ部活の後輩とか知ってる子たちが入ってきたので大分やりやすかった。

第62回(助手4年目)

一番びっくりしたのが、助手1年目で一緒にいた1年生の子がもう卒業して助手として来てること。時間の流れってすごい早い。女子E班3年目。さすがに6歳も離れてると知ってる1年生はいない。いつも途中からE班に来てくれる体育の先生が退職してしまったので、何をやろうか考えるのが大変だったけど、優秀な後輩に投げたらいい感じにやってくれてすごいと思った。はじめて班として写真を撮れた。集いでクラス対抗のレクやってるのはじめて見た。楽しそうだったし来年以降もやるんじゃないかな。

まとめ

なぜこのタイミングで5回分振り返ったかというと、来年からは僕はもう行かないからです。助手同士も含めて、たくさんの人と出会えた海浜教室という行事に感謝しています。本当に楽しかったです。助手としてもいい経験ができるはずなので、ぜひ来てください。

というか普通に高校生に戻りたい人生つらい~~~~。しばらく落ち込んでるので誰か飲みにでもいきましょう。

ぶらつき学生ポータルの今後

ぶらつき学生ポータルのアップデート

arthur.hateblo.jp

agricola.jizinet.work

今年初めに「ぶらつき学生ポータル」を運用し始めてから早半年が経ちました。公開した後もマイナーアップデートを経て少しずつ機能を増強しています。その内容を以下にまとめました。

  • カード検索・表示機能
  • カードの評価機能
  • Web通知
  • 統計・ランキング表示機能
  • Twitterカード表示
  • 初手ピックシミュレータ

アップデートするうちに、当初のDB設計では不都合な点があったり、既存のコードと衝突することがあったりという事態に直面してしまいました。ver.2として新しくリファクタしたものをリリースしてもいいのですが、その際に実現したいことがあります。

サークルのサイトから全アグリコラerのサイトへ

それは、このぶらつき学生ポータルを身内の記録サイトではなく、全てのアグリコラプレイヤーに使っていただくものに仕上げることです。幸い、セキュリティ的にヤバいところはないはずなので、このままでも安心して公開できるといえばできます。ですが、よりわかりやすいUIにするなどの改良をすることが必要だと考えています。具体的には以下の通り。

  • UIを改良し、誰にでも使いやすく
  • ユーザー同士のコミュニケーション機能を増強
    • レーティングを導入
    • カードの裁定について話し合うスレッド
  • カードの表記などを標準に統一

とはいえ、この規模のサイトを1人で作るのもそこそこしんどくて、この計画を実行できるのもいつになるか分かりません。現在実費で負担しているサーバー代も、よりたくさんの人が見てくれるようになれば広告で一部賄えるかなと思ったり。他にも、こんな機能があったらいいな、などの意見も欲しいです。何らかの形でお手伝いいただける方を募集しています。よろしくお願いします。