読者です 読者をやめる 読者になる 読者になる

<y>

Splatoonプレイヤー兼駆け出しエンジニア

ブラック企業は自分が壊れる前に辞めたほうがいいよね、という話

ここに書く内容はただの一個人の意見であり、特定の集団や組織などの総意や風潮などではない。

自分について

僕自身の特徴としては、

  • メンタルが弱い
    • 辛いことに耐える力がなくてすぐに限界に達する
    • 悩みは長いこと独りで抱え込むタイプで、たまにふと嫌なことを突然思い出して気分が悪くなる
    • つらい状態でも必死になって食い下がってやるという気概が最初からない。怠慢な性格
  • 朝が弱い
    • 単に朝が弱いのに加え、夜に熱中していることがあると睡眠時間を削ってでも楽しもうとする
    • 結果として次の日死ぬ
    • 睡眠時間が不足していると精神的に不健康になりどんどん悪い思考に陥りがちなので睡眠はとにかくしっかりとる、ということを自覚していつつも睡眠時間を削ってしまう
  • 傲慢
    • 自分がつまらないと思うことはとことんやりたくない(ある程度の妥協は勿論必要だけれど)
    • クソみたいな上司はたくさんいると思うしそいつらの言うことなぞ微塵も聞きたくないと思う
  • コミュニケーションに多くのエネルギーを使う
    • コミュニケーションが全然できないというわけではない
    • コミュニケーションをしっかり取ろうとすると多くのエネルギーを消費する
    • 無駄に飲み会やるくらいなら一人でいたい
    • 上司に気を遣うのが昇進に響くというのなら一生昇進しなくていいと思う
    • 上司にゴマすりなんて無理、やってられない

といったように、人間的スペックはかなり低いという自覚がある。
実際自分の周りを見渡しても、辛いと言いつつ一生懸命働いて金を稼いでる奴や、休日に出勤して土曜日の飲み会にスーツで来るような奴もいる中で、自分のダメさは際立つ。

社会に出て厳しい気持ちになるまで自分がこんなに弱いと分からなかった

今は社会人三年目だが、新卒で働き始めたときは「自分が人間としてのレベルが低い」という事実すら理解していなかった。
なんとかやっていけるだろうというソースのない自信があった。新卒時は大きめのSIerに入り、4月から12月までというやけに長い研修期間も相まって、完全に学生の延長として社会人一年目を過ごしていた。
その後配属されてからは見事に社会の荒波に揉まれてどんどん弱っていき、「自分が弱い」という事実を自覚していった。

周囲の人間は自分よりよほど強くしっかりしている

これは大体どんな人にも当てはまる気がするが、自分の周りは結構な割合で「社会人生活がつらい、大変だ」という人間がいる。
周りの社会人を見ていると、上司に理不尽な怒られ方をされたり、毎日夜遅くまで働いてたり、休日に無理やり出勤させられたり、微塵も楽しくないクソみたいな業務をしていたり、聞いているとすごくつらそうだと思うことが多くある。実際会って仕事の愚痴を言ったりする人はたくさんいるし、まあそれは日本社会のありふれた日常的な光景だとは思う。
多くの知り合いから、結構すらすらと職場に関連した愚痴が出てきて、日曜の夜だったりすると「明日からまた仕事だあ〜嫌だあ〜」というフレーズが、決まって自分の耳に入ってくる。
こういう人達の何が凄いかというと、辛く大変だと感じながらも毎日汗水垂らしてしっかりと働いていることである。
「凄い」という言葉に不純な意味はなく、純粋に尊敬の気持ちのみを込めている。自分には到底真似のできない芸当をこなしているのだから、本当に凄いなという思いがあるのみだ。
こういう人達を、本当の社会人と呼ぶのだろうなと思う。

明確な意図があって仕方なくしている我慢なのかを振り返る

大変残念なことに、世の中にはブラック企業という悪しき組織が溢れかえっている。
そして、一口にブラックと言っても、実に様々な種類の悪が存在する。
異常な長時間労働、休日の出勤、あまりにも評価に見合わない低賃金、理不尽な命令、パワハラ。悪の種類を列挙していけば枚挙にいとまがない。
自分が新卒で入社した会社も多様な悪が蔓延る場所だったので、配属されてすぐにくたばってしまった。ただし周囲の人達の話を聞いていると、自分などよりよっぽど過酷な環境に身を置き、必死に耐えつつ毎日働いているのだなということが分かった。自分の置かれていた環境はまだマシだったんだと思うことはよくある。
ただ、耐えられないものは耐えられないし、くたばってすぐに辞めたことは間違いだとは思っていない。正しい選択をしたと思っている。
辛くストレスフルな環境で常に厳しい気持ちで死にそうな思いで我慢して働くことに、得るものを何も見いだせなかった。
何も得るものがないのだ。技術、スキル、人間関係、多くの給料、幸福感、満足感、充足感といったものが、一つも得られなかった。
そのような状況で、耐える必要性などないはずだ。耐えても得るものがないのだから。
毎日辛い状況に必死に耐えているなと思ったらふと考えるべきだ。「今自分がしているこの我慢は、今後自分にとってどんなメリットがあるのか?この我慢によって、自分は何を得ることができるのか?」と、しっかり自分に問いかけてみるべきだと思う。
そして、「得るものが何もない」という答えしか出なかったとしたら、今の辛い環境に耐える必要性はなくなる。

本当に大切で優先すべきことは「壊れないこと」

仕事において大切にすることは、お金や福利厚生ややりがいといったように人それぞれだ。ただし、どんなものよりも大切にすべきものがある。

大学時代に必死に就活して入った会社をすぐに辞めるわけにはいかない、という意見をよく聞いたりする。
しかし、こういう意見を持っている人は、とても大切なことを忘れていることが多い。以下に挙げる事柄は、とても大切なことなので、ぜひ心に刻みつけてほしい。

  • 人間には命がある
    • 人間は命がある限りでしか生活できない
  • 人間は思ったより脆い
    • 物理的な意味でも、精神的な意味でも、人間は簡単に壊れる
  • 人間は一度壊れたら、二度と元には戻らない
    • 一度でも限界を超えたら、もう完全復活はない
    • だからこそ、自分にかける負荷には常に気をつけて、充分に余裕を持っておくべき
    • 「壊れる」ということがいかに深刻かをしっかりと考え、「壊れないこと」を最優先にする

壊れるというのは、物理的な面なら重い怪我や重い病気であり、精神的なものなら鬱病といったものが挙げられる。
上に挙げたことを考えずにブラックな環境に耐えている人をよく見る。
そのブラックな環境に耐え続けた結果が、物理的または精神的に壊れるといった場合は最悪のケースだ。壊れなければいくらでもチャンスは掴めるし、転職できる。壊れてしまったら、もう普通に働くことすら叶わないのだ。それをもっともっと自覚しないと、本当に壊れてしまう。
どんなにブラックな状況でも、転職先が決まるまでは辞めないというような考えをたまに聞く。繰り返すが、壊れないことが最優先なのだから、壊れそうならそんな悠長なことを言っていないで辞めたほうが、長期的に見たら自分のためになるはずだ。
無理して耐えて壊れてしまったら、他にしてきた努力は全て水の泡となる。
長期的な目線を持つことが大事だ。今短期的に耐えて鬱病にでもなったら、長期的に見て大失敗だ。本当に辛いなら今すぐ辞めてしまったほうが、長期的に見て大切ではないか。壊れてしまっては元も子もないのだから。

仕事を辞めること、転職することに対するハードルを下げる

ただ辛い以外の感覚がない場合に、そこに留まる必要性はない。だが、そうなると今度は退職や転職といったイベントが生じる。
職を失うことの恐怖なんて重病になったときに比べれば些細なものだ。
有名企業に勤めていたとしたら、確かに次に得る職で同レベルの企業というのは難しいかもしれない。が、それは些細なことだ。
会社に忠誠なんて尽くさなくていいし、人間的に難のある上司の言いなりになんてならなくていい。
そんなことをしてもただただ辛いだけだし、その辛さは感じなくてもいいものだからだ。
人間は千差万別であり、誰かが辛くないことでも自分は辛い、ということはごく日常的にある。自分が辛いと感じるのなら、それは自分に合わないし向いていないことなのだから、拒絶したって何も悪いことではない。

たまにとても責任感の強い人を見る。「自分がいなきゃこの職場が回らなくなってしまう」という言葉を聞いたこともある。
本当に立派だ。人間できている。だが、責任感だけでは仕事はできない。
健康な身体と健常な精神あって、初めて成果を生産できる。責任感は得てして無理な忍耐を助長する。
しかし、社会に出てたかだか数年の人間の一人分の労力程度のものは、いくらでも代替が効くものだ。自分がいなければ回らないわけではないし、本当に自分しかいなければ回らないのならそれは経営の仕方が悪いのであって、あなたの責任ではない。
あなたが辞めたところで、また別の人が補充されるし、人が足りないのなら適切に増員することが正しい対処法である。
ちっぽけな責任感でブラックな会社を長く続けさせてしまってはいけない。ブラックな企業はとっとと潰れてしまったほうが社会的には有意義な出来事なのだから、とっとと辞めてしまって潰れてくれた方がいいと思う。

良い職場もある

ブラック企業に勤めていると、会社なんてみんなこんなもんだという諦観を覚えている人を見かける。
断言するけど、そんなことはない。しっかり働きやすい環境を整えようとしてくれるいい職場だって存在する。
自分は最初に挙げたようにクズみたいな人間だけど、それでもしっかり働きやすい環境を作ってくれて、自分が興味を持つ仕事を任せてくれるいい会社に転職した。
ブラックな環境に身を置いていると、感覚が狂ってくる。色々なものがどんどんネガティブに見えるようになる。
そんなときはとにかく、自分を肯定してくれる知り合いなり家族なりに話を聞いてもらう。それから、仕事が辛くなさそうで毎日楽しそうにしているな、と思う人に話を聞く、ということをやってみてほしい。
自分がブラック企業に勤めているなという自覚があるのなら、色々な人の話を聞いてみるべきだと思う。世の中にはそんな働きやすい職場があるのか、という発見に繋がる可能性があるし、何より精神的に疲弊している状態では正常な判断ができない。そういう場合は、正常な人の判断を参考にするのが最も得策であるはずだ。

つまり何が言いたいかというと

仕事に自分が壊されるなんてとてももったいないし辛いことなので、自分が壊れないことを最優先に考えてほしい。
自分が壊れたときに迷惑をかける人を思い浮かべてほしい。家族は勿論、多くの知り合いを心配させることになる。
どこの誰かも知らない他人に心配をかけさせないようにするには、まず自分の周囲の人達に心配をかけないことから始めよう。
自分の身近な人達を幸せにできない人間が、それ以外の人間を幸せにできるわけがないと思う。

自分の現況

7月からwebエンジニア始めて、もう半年弱経ったけど今の自分どうなの、というやつ。
年末に見返すことになると思う。

  • 今何が足りないか?
    => 金、精神的余裕、技術力
    • それらはどうしたら足りるようになるか?
      => 金は今すぐは無理で普段の業務をしっかりこなすことで増やすのが現実的。あと実家に戻る(来年本当に戻るかも)。技術力はまず書くコードの量が少なすぎ。精神的余裕は、どうすればいいか分からない。
    • 普段の業務をしっかりこなせているか?
      => no. 作業の遅延、集中力の欠如、その他問題だらけ。
      • その問題を解決しようと努力しているか?
        => 半分yes. 実際に解決できたかは別として取り組んだことはいくつか。
      • 具体的に何に取り組んだ?
        => ブルーライトカットメガネ買う、睡眠時間増やす、定時後の人が少ないときにガッと進める
      • それらは上手くいっているか?
        => 全部は上手くいってない。定時後でも集中切れるし、結局寝るの遅くなる日もまだ多い。今日もこれ書いてるからそうなると思う。
      • どうしたら上手くいく?
        => 意識の問題だけど習慣化できてない。ルーチン化しなきゃいけない。
  • 毎日のルーチンはどんなことをこなしているか?
    => wikihubの日報コミュニティに毎日日報を書くことと腹筋ローラー。
    • どれくらい続けているか?
      => 日報は半年弱くらい毎日、腹筋ローラーはつい最近始めた。
    • 日報はしっかりとした内容か?
      => 正直内容は薄い。毎日書き続けることが最優先だけど、それは出来てきているので、もう一段上のレベルを目指さなくてはと思う。
  • 毎日業務以外でコードを書いているか?
    => 書いていないし、これができていないのはかなり良くないと思う。
    • そもそも業務以外で毎日コードを書くためにはどうすればいいか?
      => 作りたいものを決める、気になる言語やフレームワークチュートリアルをやる、とか色々ある。
      • それを毎日こなすためにはどうすればいいか?
        => これも習慣化だけど、結局習慣化するためにはモチベと強制力が必要。時間は無理やり捻出する。
      • 無理やり捻出する時間をどう作るか?
        => 結局普段の業務の密度を上げて作業時間を減らして早く切り上げるしかない。
      • 普段の業務の密度を上げるには?
        => 睡眠時間、あと分からないところが出てきたら質問する、「分からないこと」のハードルを下げる(自分の分からないという感覚を信用しない)、Twitterばっか見ないで最速で終わらせて業務後に時間作る、そのときにTwitter見ればいい。
  • 普段何かしらの知識や技術をインプット、アウトプットしてるか?
    => インプットはしている日としていない日がある。していない日は当然として、インプットをしている日でもアウトプットはほとんどしていない。
    • アウトプットを増やすためにはどうすればいいか?
      => 無理にアウトプットのことばかり考えるのはいいことかどうかわからないが、現状はしていなさすぎるので、せめて一週間に一回ブログ書くとかする。
    • インプットがない日はどう減らすか?
      => インプットが全くない日は体調悪いとか寝不足とかの日が多い。まずそれをなくすべき。
    • 技術情報を仕入れているか?
      => Qiitaで気になる記事はすぐストックするようにはしている。
      • その記事をしっかり読んで理解しているか?
        => そもそもストックして読んでいない記事がたくさんある。
      • どうやって記事を消化していくか?
        => 一日一記事、と思ったが、記事の内容量には差があるしどうすればいいか検討。
  • そもそもなんでSIerからweb屋に転職したんだっけ?
    => 知り合った強いエンジニアのように自分もなりたいし、コードたくさん書きたいと思ったから。
    • SIer時代に比べて自分は技術的に強くなったか?
      => 少なくとも前職のときよりは強くなった。でも所詮その程度。
    • 知り合った強いエンジニアと比べるとどうか?
      => 足元にも及ばないし、むしろ差が開いている気がする。
  • 何が足りないのか?
    => 習慣化する力と自分を律する力
    • どうすれば力はつくか?
      => 習慣化する力は少しずつついているはず。日報で。ただまだ足りないので、もう一つ、もう二つくらい習慣化する。一つずつ増やす。今は腹筋ローラーだけど、腹筋ローラーはあまり時間を割かなくてもできる。だから、もう一つ、毎日することを決める。
    • 具体的に何をするか?
      => 業務以外のコードを書く、というのが理想だけど。今それをやると挫折する気がする。Rails Tutorialを毎日30分やる、パーフェクトRuby on Railsを毎日10ページ進める、それのどっちかが現実的だと思う。まずRails Tutorialやる。年末を迎える頃にこれを読み返している状況でRails Tutorial終わっていなかったらかなり恥ずかしい。
    • どうすれば自分を律する力が手に入るか?
      => これは本当に自分のやる気次第な気がするが、もっと具体的で現実的ないい案はないものか。
  • その他に今の自分が変えるべきところは?
    => 土日遊ぶのはいいんだけど、予定がないときに何もしていなさすぎ。勿体無い。コード書く絶好のチャンスなのにだらけすぎ。

書いてて情けなくなってきた。だけどこれが現実だし、現実を見ないことには始まらないんだよな。

第五回splathonに参加してきた。

Splatoonが発売してから1年以上が経った今でも、その楽しさが色褪せることはない。
8/27(土)に開催されたsplathonも、それを象徴する楽しいイベントだった。

splathonとは

splathonとは、2015年5月28日に任天堂から発売されたWiiU専用ソフト「Splatoon」と、「marathon」(マラソン)を足した造語だ。
似たような言葉にハッカソン(hack + marathon)という言葉がある。こちらの記事によると、短期間でソフトウェア開発を行い、そのアイデアや技能を競う競技だ。
splathonは、株式会社Speeeさん発祥の言葉で、「数時間から数日間の短い時間、Splatoonに没頭して複数の参加チームで競い合って楽しもう」という、IT企業のSplatoon対抗戦イベントのことである。
詳しくは第四回のSpeeeさんのブログを参照するとよいかも。

参加までのいきさつ

基本的にはsplathonは企業対抗戦のため、企業毎にチームを組んで出場するのだが、今回は知り合いのバースト・インカーさんに誘われて即席チームで出ることになった。splathonは前から名前だけはちょくちょく耳にしており、楽しそうだな〜という印象を受けていたため、バースト・インカーさんが募集していた時にはすぐに飛びついた。
splathonまで残り一週間ちょっとという時期に即席で組まれたチームだが、自分以外ウデマエS+カンストというとんでもないチームになった。ちなみに自分の最高ウデマエはS+74、基本的にチャージャー(特にリッター)しか持てない。
当日までにある程度連携を深めるべく、毎夜タッグマッチや対抗戦を行っていた。毎夜Splatoonに没頭していたこの時点で、もうsplathonは始まっていたのかもしれない。

当日

会場は六本木にあるSpeeeさんのオフィス。非常に綺麗でオシャレ。

また、お菓子や飲み物などとにかく充実していて素晴らしかった。

参加チーム紹介

企業名パワーに圧倒された。相当レベルが高い。
自分は即席チーム「ポッポ」で参戦。なんとなく周囲のイカ界隈が「ポ」という感じだったからこうなった。雑ですまんな。

要注目はイカナカマを開発・運営し、前回のsplathonで大人相手に20キル以上出したという圧倒的戦績を出したスーパー小学生、通称"スパショ"を擁するしくみ製作所の「瀬賀高等学校水槽学部」、そして前回優勝チームKADOKAWAの「K/D2016」だ。

ルール

第五回splathonはイカのようなルール。

  • 全チームによるスイスドロー形式で試合進行。1回のラウンドで2試合行い、2勝なら勝点3、1勝1敗なら勝点1、2敗なら勝点0を得る。
  • ラウンド4か5まで行い、勝点上位4チームが決勝トーナメントに進む。
  • 1試合目は先攻チームがルール(ガチエリア/ガチヤグラ/ガチホコ/ナワバリ)を決め、後攻チームがステージを決める。2試合目は後攻チームがルールを決め、先攻チームがステージを決める。
  • ギアは「逆境強化(アタマ専用)」「インク回復量アップ」「スペシャル減少量ダウン」で固定。サブスロットにはなにもギアパワーがついていない状態。
  • 勝点等の理由で決勝トーナメントに参戦するチーム数が合わなかった場合や、決勝トーナメントで対戦成績が1勝1敗だった場合は、ステージランダムのナワバリバトル一本勝負を行う。

第1ラウンド

VS しくみ製作所

初戦でいきなり要注目チームとの試合が決まった。スパショぶっ潰す、社会の厳しさを教えてやるなどの物騒な発言を聞かなかったことにしつつ、戦いへ。
1試合目、2試合目ともに勝利、勝点3をもぎ取って第2ラウンドを待つ。

この間、他のチームの対戦で回戦トラブルが相次ぐ。

会場にはWiiUが16台もあり、いろいろと難しい模様。

はせがわさんが開発したこの4画面観戦システムで、待機中も楽しい時間が過ごせた。はせがわさんは寝過ごしたり逆方向の電車に乗ってしまったりと災難続きだったようだ。ほんとお疲れ様です。

第1ラウンド終了時点ではこんな感じ。

第2ラウンド

VS KADOKAWA

回線落ちによる再戦が相次ぎ、ポッポチームは第1ラウンドから第2ラウンドまで3時間ほどあった。自分も軽くウトウトしていたが、前回優勝チームとの戦いということで気合いを入れいざ出陣。
しかしまあ、対戦相手が対戦相手ということもあって緊張したのか、結果は2敗。それも結構ボコボコにされた。
マヒマヒエリアはリッターの得意なステージだったんだけど、焦りまくって振りかぶったダイナモを射抜けなかったりなどした。無念。ポ。

関係ないけどこういう素晴らしい環境でイカができて素晴らしかった。

第3ラウンド

VS BookLive!

ルールに少し変更があり、回線落ちによる再戦等で時間が押しているため、第3ラウンドまでの勝点で決勝トーナメント進出チームを選出することに。第2ラウンドで勝点を上げられなかった我がチームはこの試合が重要なポイントとなった。
しかし、決勝トーナメント進出の懸かる重要な試合でも冷静さを欠くことなく2勝。キンメダイホコで出したスコアが自分の第五回splathonにおけるハイライトとなった。

第3ラウンドが終了した時点での順位。

この時点で勝点9のKADOKAWA、勝点6のしくみ製作所と我等ポッポは決勝トーナメント進出が決定。残りの1チームを決めるためにこれから壮絶な戦いが始まる。

  • 勝点4の3チーム(pixiv、楽天、CyberAgent)の代表者がじゃんけんで勝者を1人決める。勝者の所属チームには謎の勝点1が与えられる。
  • 勝点5の3チーム(シャープ、NHN、四社連合)+謎の勝点1付与により勝点5になったチームの計4チームでステージランダムのナワバリ一本勝負のトーナメントを行い、優勝したチームには謎の勝点1が与えられる。
  • 勝点6以上の3チーム+謎の勝点1付与により勝点6になったチームの計4チームで決勝トーナメントを行う。

まずは熱いじゃんけん大会、勝ったのは楽天。続いて熾烈なナワバリバトルを制したのは四社連合だった。

決勝トーナメント1回戦(準決勝)

VS 四社連合

へへへ、repeatedlyさんへの日頃の恨みを晴らしてやるぜ…!(※日頃の恨み等の感情は一切ありません)

1試合目はハコフグエリア、2試合目はキンメダイエリアだった。見事2勝、完全にチームメイトのおかげ。キンメエリアで20k出したロンカス持ちのタイビィくん、ダイナモとスシコラとロンカスとホッカスとハイカスでカンストしてます。いみわからん。いっこわけてほしい。

決勝戦

VS KADOKAWA

決勝の相手は、準決勝で"スパショ"率いるしくみ製作所を倒し、第2ラウンドで我々も辛酸を舐めさせられた因縁の相手KADOKAWA。 1試合目はモンガラキャンプ場ガチヤグラ。自分は普段から使っているリッターを持たなかった。このステージはメガホンレーザーが刺さりやすく、相手にリッターがいない状況(今までのKADOKAWAの試合を観戦して考察)なのでメガホン持ちのスプラスコープワカメを持った。
熱い展開が続く中、自分達がカウントリードを奪った状態で相手がヤグラに乗り試合は延長戦へ。

しかしここでヤグラを止めることができず、カントリードを奪われ逆転負けを喫する。

メガホンレーザーを撃って試合を終わらせに行こうとスペシャルゲージを貯めたものの、メガホンを撃つ前にキルされる始末。おお情けないことよ…!

2試合目はキンメダイホコ。
タイビィくんが空中ホコ直撃を何回か決めていなければ負けていた。タイビィゲーである。いやほんと何も出来なくて申し訳ねえ…KADOKAWAマジ強いんですよ…。
というわけで、なんとか1勝1敗に持ち込んだ。運命はステージランダムのナワバリ一本勝負に託されることに…。

ラストのナワバリのステージはモズク農園に決まった。自分はリッター持ちたい!って言ってリッター持ったけど、正直モズクのような広いステージだったら、もっと塗りブキで来るべきであった。キル重視のスタイルで味方の塗りを促進できれば…と思っていたが、最終的なキルデスは1/0というなんとも貢献できていない感の滲み出るスコアとなった。
このナワバリで勝負あり。優勝はKADOKAWAで、我等ポッポは準優勝となった。

KADOKAWAさんほんとおめでとうございました。

懇親会

splathonにはIT企業所属員のチームのみが参加しているため、凄いエンジニアの方がたくさん来場していたりする。
自分も7月から新米のエンジニアとして働き始めた身なので、色んなエンジニアの方と交流したい!という思いがあった。が、人見知りが盛大に発動して、情けないことにほとんど誰にも話しかけられなかった。非常に勿体なかった。次の機会があれば、色んなエンジニアの方と交流するチャンスを絶対に逃さないようにしたい。

寿司肉ピザで全員優勝。

LTタイム

今回は「スプラトゥーンにおける自分なりの立ち回り」というお題で数名の方がLTするという企画があった。

こんな感じでLTの評価は高く、聞いていて面白かったしとても有意義だった。
LTの資料はイカに貼っておくので、ぜひ見てみてほしい。

speakerdeck.com

speakerdeck.com

speakerdeck.com

閉会

初参加な上に即席というチームだったが、今回は準優勝することができた。 チームメイトの素晴らしい活躍に感謝したいし、もっとチームに貢献できるようなチャージャー使いになりたい。

帰宅してなおSplatoonに勤しむ面々

今回は声優志望の方が実況で場を盛り上げてくれた。実況があると楽しさが増して非常に良かった。 実況してくれた方はこちら。

終わりに

改めて運営してくださった皆さんにお礼を言いたい。
非常に楽しむことができたし、次回があればまた参加したいと強く思えるようなイベントだった。
次こそは優勝するためにもこれから鍛錬を続けていきたい。
本当にありがとうございました。

日報 2016/08/16

今日ちょっと正規表現の沼に足を取られてしまったのでそれを書いていきたい。

やろうとしたこと

Ruby on Railsでアプリケーションを作っていて、「お知らせ」(notification)というモデルを新規に登録する際に起きた話。
「お知らせ」にはタイトルや登録日といったプロパティがあるのだが、今回問題になったのはURLというプロパティ。URLにはwebページのリンクが入るのだが、このURLリンクをユーザーが入力する際のバリデーションをどうするかという話になった。
rails url バリデーション」といった言葉でググると色々出てくるのだが、結論として「こちらがどんなに精密にURLのバリデーションチェックをしようが、ユーザーが存在しないURLを入力したら意味がなくなる。形式的なバリデーションは出来ても、ユーザーの入力によっては無力だ」という話になった。これにはまあ色々な意見があると思うのだが、今回作成しているアプリケーションは、一つの企業の組織内の人間だけが利用するものなので、精緻なバリデーションは不要だろうということになった。

本題

今回のバリデーションの内容は、「全角と半角カタカナのみを禁止にする」というものになった。早速ググッて色々調べたらなにやらよさげな正規表現が。

 /^[ -~。-゜]*$/

正規表現において、^は行頭、$は行末を表す。つまり上記の正規表現は、行頭〜行末の間に、半角の文字が一文字以上入っていれば大丈夫という旨だということ。
なるほど、これなら良さそうだと思い、モデルクラスに

validates :url, format: { with:  /^[ -~。-゜]*$/ }

と記述してサーバーを再起動し、お知らせの新規登録画面に遷移しようとした。 そして表示された画面がこちら。 f:id:yklitter:20160818000454p:plain

エラーなのかと萎えつつエラー内容を読んだら、
「その正規表現は複数行向けのアンカー(^と$)を使っているけど、脆弱性があるよ。\Aと\zって知ってる?それとも:multilineオプションをtrueにするの忘れた?」という内容だった。(英語が苦手なので誤訳があったら大変申し訳ない)
脆弱性?と思い調べてみたら、Ruby正規表現機能はデフォルトで複数行モードになっているとのことだった。
例を挙げると、/^[a-z]*$/という、「半角小文字アルファベットだけで構成された文字列ならおk」という正規表現バリデーションに、

ほげふが全角
hogefuga

という複数行の文字列を通そうとすると、通ってしまう。
これは、半角小文字アルファベットだけで構成された文字列「の行がある」という理由でバリデーションを通過する。「^」はあくまでも行頭であり、行の頭であれば問題無いと判断されるようだ。
これではバリデーションが意味をなさなくなってしまい、セキュリティリスクがある。そのため、^と$の代わりに「\A」と「\z」を使う。「\A」は文字列の先頭、「\z」は文字列の末尾を表すとのことで、なるほどこれなら複数行でも問題なさそうだ。
railsはこのようにセキュリティリスクがある正規表現をArgumentErrorとして表示してくれるのか…と感動してしまうワンシーンだった。

その後

\Aと\zを使って、/\A[ -~。-゜]*\z/に書きなおしたぜ!と意気揚々と「あいう」という全角文字列をURLの入力欄にぶち込んだら、あっさり通過してしまった。あれ…。
全角アルファベットが含まれているとしっかりとエラーメッセージを吐くのだが、日本語のみだとすんなり通る。
マジか…とげんなりしていたところ、どうやらShift_JISの場合のやり方らしい。正規表現沼と文字コード沼はつながっていた…。
で、まだどうするかを模索中。
沼は深い。

参考にしたサイト

Ruby正規表現で全角と半角のチェック(バリデーション)する

正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう | 徳丸浩の日記

qiita.com

近況

ここ最近こちらで書いていなかったので、書いていこうと思う。

日報

WikiHubには変わらず毎日ちまちまと日報を書いている。
内容は薄いけど、毎日書くことに意味があるのかなと思うし、その日の夜にどんな感じだったかな〜というのを思い出すっていう行為をしているだけでも有意義なものであると思う。

業務

基本的にはRuby on Railsを用いて一般的なCRUDの機能を持ったアプリケーションの開発をしている。
何度も書いているが、Ruby on Railsに関しては完全に初心者なので、とにかく分からないことは聞いたり調べたりしながら無理やり進めている。
本当に暇な時間にRailsチュートリアルを少しでも進めておくべきだった…。今はまだ3章途中で、ゴリゴリ進めていきたい。
あと最近はロジックの部分が大体できてきたので、SQLとかjavascriptとかも触っているのだが、とてもつらい。
postgreSQLを利用していて、ストアドプロシージャ作ったりしている。PL/pgSQLって何…という状態だったのでそれなりにヤバい。

メモ

普段から分からないことだらけなので当然のように調べたことをメモしたりしている。
最初は色々メモアプリを探していたのだが、結局OS Xにデフォルトで入っているメモアプリが一番使いやすい感じだったので今はそれを使っている。
最近よく予期せぬ理由で頻繁に落ちるので納得いかない。

集中力

特に今週顕著だったのだが、集中力が全然ないことに気付いた。今更だけども。
昔から集中力がなかったのだが、もはやそんなことを言っていられないので、どうすればいいのかを少し考えている。 一日中ずっと集中力がないわけではない。集中できるときは集中しているのだが、できないときは本当にできない。
少しの時間帯に強靭な集中力を発揮するのではなく、コンスタントにそこそこな集中力を発揮したい。
集中力が切れるタイミングは、まあ普通に疲れた時もそうなのだが、最も顕著なのは、
「やらなきゃいけないことに対して分からないことばかりすぎる(自分の知識だけで解決できそうにない)時」
だと思っている。
新しいことを自分の頭に取り込むときは刺激があり楽しいのだが、それが「分からないことに直面したから調べる」という状況だと、体力の消耗が激しい、気がする。
体力の消耗が激しければじゃあ体力をつけろという話になる。実際、肉体的な体力は非常に重要なポイントだと思っているので、筋トレをすることはかなり有益だと思う。筋トレしようかな。

小目標の可視化

ダラダラと目標もなく作業しているとだらけがちになるので、小さい目標をいくつも立てていって、更にそれを可視化することで、やらなければいけないことを明確化して作業効率を上げようと企んでいる。
方法として、メモアプリで以下のように記述して明確化している。

  • 小目標を書く際は"#"を文頭に書く。
  • 小目標を達成したら、"#"を文末に書く。
  • 達成していない小目標より下にはメモを書かない。

具体的には↓

メモメモ〜〜〜メモメモ〜〜
メモhogeメモfuga
# 目標1 #
メモメモpiyopiyo
# 目標2

上記の例だと、目標1は達成済み、目標2は未達成ということになる。
こんな感じでやっているのだが、何もしないよりはまあマシという感じになっている。
他にいい方法があれば教えてください…。

その他

他に集中力を高める方法としてはガムを噛むというのがあって、これが地味に効いている、と思う。
あとはやっぱりちゃんと睡眠をとること。これが本当に大事。まだ自分に最適な睡眠時間とかしっかり把握できてないので、しっかり把握していきたい。
あとお金貯まったらいい寝具を買いたい。絶対貯まらないと思う。

日報 2016/07/25

最近サボっているというわけではなく、別のところに日報を書くことにして、こっちはそのまとめ的なものとして使おうかなという体制にしようと思っている。
ので、サボってはいない。

WikiHub

今日報を書いている場所はWikiHubの日報コミュニティ。そもそもWikiHubは、r7kamuraさんが作ったWikiで、色々なコミュニティがあったりする(とても雑な説明だが)。
ここでは「日報」というコミュニティがあり、色々な方(主にエンジニアが多い)が日報を書いている。
エンジニアが気軽に書いた日報を気軽に読めるというのもあって、はてなブログよりも記事の公開に手間がかからず気楽だし、自分もここで日報を書いてみようかな〜と思い始めた。
はてなブログでは毎日書くことはほとんど叶わなかったが、WikiHubはより手軽感があり、それに加えて"進捗とかプログラミングのこととかじゃなくても、とにかくなにかを日報として書いた方が長続きしそうだな"という個人的な所感もあって、WikiHubを日報の場にすることにした。
はてなブログには、WikiHubで書いた日報を軽くまとめたりしていく形で更新しようかなというスタンスで行こうと思う。

ポケモンGO

Lv.14だけどイーブイに2回遭遇して2回とも逃げられたからまだイーブイがいません。

業務とかプログラミングのこととかはまた別の機会に(もう寝ないとつらい)