時代に翻弄されるエンジニアのブログ

ゲームプログラマをやっています。仕事やゲームや趣味に関してつらつら書きたいと思います。

なぜアイデアは風呂の中で思いつくのか

単に頭の整理をするのに便利だと言うこと。

 

イデアは雑多な情報からは生まれてきません。それは、アイデアは統一的なものだからです。点々を結んで線になったものと言うイメージです。

 

そのためには点と点の整理が必要になります。ただ整理するだけではなくつなげる必要があります。

 

この作業は、アウトプットになります。そしてインプット中は、アウトプットすることができません。これは、入力と思考が一緒にできないからです。

 

そして、現代人は基本的に、視覚と聴覚を常に使っています。これは、スマホやテレビ以外にも、意気込んで机にノートを広げることも含めてです。

 

お風呂に入るということは、基本的に感覚を制限します。そのため、体の中で使用するものは頭だけです。つまり、整理とアウトプットに専念できます。これがお風呂でアイデアが出る理由です。

 

これは、寝ているときや、トイレにいるときも一緒です。つまり、アイデアをアウトプットするための整理には、感覚のシャットダウンを行うこと。そのうえでアウトプットしか行なえない状態にすることが大切です。

 

僕も、ゲームづくりで、仕様決めや、プログラミングで悩んだときは、感覚をシャットダウンして考えるようにしています。

補填ってどんな基準でするの?

こんにちは、ゲームの運用で重要な補填。今日はその基準などについて話したいと思います。

補填とは?

ゲームの運用では、どうしても補填というものを行います。

補填とは、ゲームの不具合に対してお詫びとしてゲーム内通貨やそれに準ずるものを配る行為です。詫び石なんかとも呼ばれていて、基本的に大きな障害が起きたあとは大量の詫び石が配られるため、それを目当てにゲームに参集していくる人もいるくらいです。

今日はその障害が発見されて、補填をおこなうことになりました。障害の内容はサーバー上のデータ不整合によってゲームにログインをすることができないユーザーがいたというものでした。原因に追求と修正はすぐ終わりましたが、ここからが補填の出番となります。

補填の基準

補填はゲームのタイトルによって、基準が定められています。例えば、進行不能系の障害の場合は、障害の期間と遊ぶことで手に入れれるはずだったアイテムの内容など、その期間の損失を補填するものとなります。アイテムが紛失する場合は、そのアイテムの内容であったりと様々です。

今回はかなりの長い時間ログインできないと言ったものだったので、その期間ログインボーナスとして配っていたアイテムをすべて補填するような内容となりました。

基本的に、補填内容は、運用担当とカスタマー担当が過去の運用実績や納得できる根拠から算出します。それ以外にも、お客様が障害によって達成できなかったものが補填対象になる場合があります。例えば、参加したかったイベントが障害によって、参加できなかった場合、そのことに対してお問い合わせがあった場合は、そのイベントで平均的に手に入れることができるくらいのアイテムが補填されたりました。

要は、ゲームを提供する側とゲームを行う側双方が納得行くような内容となります。

補填のやりすぎに注意

補填は基本的に障害に対してそれを補うように行うもので、無闇にくばるものではありません。世の中では、障害発生の補填目当てでゲームに参加して、一時的いにバズるような状態になるかもしれませんが、1個100円で売っているアイテムをユーザー1000 人に補填するとしたら、単純に10万円の損失になります。

補填はあくまで補填であり、広告機能のために行うものではありません。そこを勘違いしたゲームは人気取りのために無料で配りすぎて、今度は有料アイテムが売れないと言った状態になるので、補填もそこそこにとどめておくべきと言えます。

shell コマンドライン取扱テンプレート

こんにちは、シェルスクリプト書くときにコマンドライン引数は必須ですよね?そのときに必須の項目やヘルプを作りたいと思ったことはありませんか?毎回調べていませんか?そんなときのためにテンプレートを作成したので使ってください。

#!/bin/bash

usage_exit() {
    echo "$0 -a sample -b sample2 "
    echo "-a [必須] 1つ目の引数を指定 "
    echo "-b [任意] 2つ目の引数を指定 "
    exit 1
}

VALUEA=""
VALUEB=""

while getopts a:b:h OPT
do
    case $OPT in
        a) VALUEA=$OPTARG ;;
        b) VALUEB=$OPTARG ;;
        h) usage_exit ;;
        \?) usage_exit ;;
    esac
done

if [ -z "$VALUEA" ]; then
    echo "-a は必須です"
    exit 9
fi

echo $VALUEA
echo $VALUEB

echo "success"

以下簡単に解説をします。

コマンドライン引数の扱い方

今回は getopts という方法でコマンドライン引数の指定を行っています。通常コマンドライン引数を取り扱う場合 $0 $1 のように受け取りますが、これでは -a ?? のように指定ができません。

getopts では以下の部分で、コマンドライン引数の指定を行うことができます。指定されたものは case 文で判定でき、その中で $OPTARG に引数に指定されたものが格納されています。

while getopts a:b:h OPT
do
    case $OPT in
        a) VALUEA=$OPTARG ;;
        b) VALUEB=$OPTARG ;;
        h) usage_exit ;;
        \?) usage_exit ;;
    esac
done

while getopts a:b:h OPT のようにすることで、 a,b,h 以外の入力時には以下のようにエラーが発生するようになります。

test.sh: illegal option -- f

必須項目の設定

本プログラムでは -a の指定は必須としています。そのために、はじめ VALUEAには空白を入れておき、変数が空白かどうかで指定されているかを判断しています。

if [ -z "$VALUEA" ]; then
    echo "-a は必須です"
    exit 9
fi 

上のように if 文中に -z オプションを入れることで空白の判定ができます。

おわりに

必須の指定やデフォルト値の指定ができるライブラリなどはいろいろありますが、原始的にコマンドライン引数指定子を使った場合はこの様になると思います。あとはお好みでカスタマイズしていくのが良いと思います。

論点思考を読んだら論理的思考の考え方が少し変わった

こんにちは、簡単に言うとロジックツリーの使い方が間違っていました。

論点思考の本とであったのは、近所の書店でした。ロジカルシンキングの本はいくつか見てきましたが、薄い本が多く方法論的にまとまっているのが大半でした。今回はちょっとした興味でハードカバーの本を買ってみたのがこの本との出会いになります。

論理的思考の今までのイメージ

論理的思考は課題を解決するための武器だと思っていました。なにか問題があったときにその問題を論理的に説いていけば、いつかは最適な問題にたどり着くと思っていました。

個人的にロジックツリーなどは仕事でも使っていましたが、うまく使えないのはまだ経験が足りないからだと思っていました。ちなみにロジックツリーとは課題があったときに、それがなぜなのかを木構造で表現することで物事の深掘りを行っていくフレームワークです。

論点思考とは?

論点思考は課題そもそもを疑ってかかる思考法でした。今考えている課題が正確なのか?その疑問から始まります。

それを判断する過程でロジックツリーなどを使用していましたが、そもそものロジックツリーから作り始めるという考え方が違いました。

まずは、当たりをつける

僕が思う論理的思考では、バックボーンが何もなくても論理的思考さえ鍛えたら答えが出るというものでした。しかし、この本では経験や引き出しをフルに使って、あたりを付けるところから始めていました。そもそもの始まりが僕は間違えていたということです。

あたりを付けたあとは、自分がいま論点としている事柄がツリー状のどこに位置するのかを見つけます。そのときにロジックツリーを使います。ロジックツリーをつかって、論点を細分化していきます。そのときにあたりを付けた部分がツリーの中のどの論点に位置するのかを決定します。例えば、コスト削減を行いたいとして、業務最適化を論点とした場合、コスト削減は大論点で業務最適化は中論点となります。

そのようなツリー状の位置が決まれば、中論点のしたに少論点が連なっていきます。業務最適化なら、業務内容の把握や業務の可視化などです。

ロジックツリーは変わっていくもの

ロジックツリーに最初の項目ができれば、あとは、そこから枝葉を伸ばしていきます。コスト削減からは、業務最適化の他に外注の削減などが小要素として存在しますし、さらに上段には利益の向上などが上がってきます。このように、ある基準が決まればそれの穴を埋める用に、ロジックツリーが出来上がり、最終的には全体俯瞰した上での最良の選択ができるというわけです。

勘違いしていたこと

論理的思考は、穴を埋める者であって作り出すものではないということを最近思っています。この本を通じてそのことを再認識させられました。

あたりをつけるのは経験や情報が必要です。論理的思考はアウトプットなのであって、インプットではないということです。

今日同僚が退職した

退職することはうちの会社にとってはよくあることだが、今回は多少事情が違ったので、思ったことを書いていきたいと思う。個人的な思い込みや感想も含まれているかもしれないが考慮していただきたい。

退職した同僚はできる人だった、実装も早いし、専門的な知識も持っている。ゲームづくりに関する勘所もよい。仕事でも一定の位置には属していて、技術的にもみんなに頼られる存在だった。

ただ、コミュニケーションと心に問題があった。簡単に言うと思い込みや自己嫌悪が激しいと言うこと、そして人に強く物を言えないことがあった。

ある大きなプロジェクトを任されていた。通常のゲーム運用は数ヶ月で機能を作成して、品質検査を行ってリリースする。彼が任されていたのは半年かけて行う大規模な実装だった。企画と一緒に開発をしており、期間が長いことや企画が熟練した人財であったこともあり、かなり放置されて独自で進んでいるプロジェクトだった。

はじめはうまく実装をしているように見えた。作っている過程で生き生きした表情をしていることも多かったし、エンジニアの中でも良い感じに進捗しているように見えた。だけど、実際は全然進んでいなかった。仕様が決まらないまま開発が進んでいき、実装はしているが作り直しになることもおおかった。最終的に蓋を開けてみると、リリースには間に合わない。どこにでもあり、誰でも簡単に陥ってしまう開発現場のある出来事でしかなかった。

彼はそれから会社に来なくなった。一週間がすぎ、休職扱いになった。後々聞いた話だが、エンジニアとしてプロジェクトを円滑に進められなかったことにかなりの責任を感じていたらしい。ひにひに近づいてくる納期に対して、自分は実装できるのに、企画が進まない。そんな進まない企画に対してできることを思いつかず、意味のない実装を繰り返しては自己嫌悪に陥っていったらしい。

彼は、その後一度復帰したが、そのまま今日退職した。

彼は人生は難しいと言っていた。退職した理由はこれだけではないにしろ、自分のことを社会不適合者だとも言っていた。そして彼は20代とまだ若かった。

僕は責任と放棄は違うと思う。開発現場で確かにみんな忙しく仕事をしていて他人のことをとやかくいうこともできないのかもしれない。実際これ以外にも他のプロジェクトも動いている。だが、彼を追い詰めたのは、誰も見てくれない。誰も気にしてくれない。自分がやるしかない。でもできない。といった気持ちだと思う。助けてあげる人、見ていて上げる人、気にして上げる人、意見を言ってくれる人、見守っていてくれる人。そんな人が少しでもいれば彼の進む道も変わっていたのかもしれないと思った。

若いから、まだ経験が浅いから、こんなことが起きたわけでもないと思う。ただチームの雰囲気、みんなで物事を作っていこうという雰囲気がもう少しあったら、もっと良いチームになっていったのではないかと思う今日このごろでした。

土日のモチベーションが上がらない原因とは

こんんちは、今回はモチベーションについて普段思っていることを書いていきたいと思います。

モチベーションとは、何なのか?個人的には、目標に向かって行動する行為だと思っています。
土日のモチベーションが高いということは、自堕落にその日暮らしをするのではなく、事前に決めた目標に沿って動いている状態のことを指しています。

モチベーションが低いとは?

モチベーションが低い状態とは、反対に自堕落な生活を送っている状態です。つまり、朝適当な時間におきて、適当にご飯を食べて、その時やりたいことを行う。目標や人生でやりたいことがあっても、やりたいなと思っているだけで、行動に移すこともできない状態です。

なぜ、何もできないのでしょうか?

原因

僕が思っている原因は、月曜日が来てしまうことです。月曜日とはつまり次の仕事が始まってしまい、プレイベートな時間がなくなってしまうからです。

休日は自由、平日は仕事。多くの人がこれに当てはまるのではないでしょうか?平日に仕事の残業が多い人ほど平日にプライベートな時間取れず、平日は仕事のイメージが強くなっていくと思います。つまり、プレイベートを楽しめるのは休日だけなのです。

ここに考え方の盲点があるとおもっています。

プライベートのイメージ

プライベートの僕のイメージは、自由時間です。自由時間は何をやってもいい時間です。読書をしたり、ゲームをしたり、主に楽しむ時間です。対して、モチベーションを高めないといけないけないことというのは、基本的には辛いことになります。自分の副業だとか、勉強や将来のためになること。これらは、プレイベートな時間に入れることはできません。

どうすればいいのか?

モチベーションを上げる時間をプライベートな時間と区別することです。そもそも、プレイベートの時間を削ってモチベーションを上げること自体が間違っていたのです。

理想を言うと、平日を 仕事+モチベーション にすることだと思っています。プレイベートを確保しつつ、モチベーションを高めることができ、プレイベートの自堕落を許容することができます。

結局は

結局は、納得感を持って生活することがと思います。仕事とプライベートを区別することは大切だとおもいますが、そこにモチベーションを上げる時間を入れていないことが問題だとおもいます。普段の生活ペースにモチベーションを入れ込むことをしっかり許容して、その時間をしっかり納得して確保することが大切だと思います。