見出し画像

10月20日 作業に詰まった際の突破法

10月20日ですね。

昨晩、日が変わる直前に、詰まっていた実装を一つ解決しました。
かつてお客様に実装して納品した、AWS Lambda上で動くnode.jsのコードです。


そのコードの中では、boxにフォルダを作る処理を実装していました。

boxにフォルダを作れば、作ったフォルダ内に数階層のサブフォルダを作成する。フォルダができてからでないとその下の階層にはフォルダを作れません。そのため、フォルダが作成された事をPromiseオブジェクトを返してもらい、同期してから下位フォルダから作成処理を行う必要がありました。


このほど、このロジックを改修する必要があり、ほぼ同じ実装でもう一つ関数を作ったのですが、それがなぜかうまく動かない。
検索やフォルダ取得の処理は問題ないのに、フォルダを作成した後に返ってくるはずのPromiseオブジェクトが返らず、サブフォルダが作成されない。


悩みました。約四日近く。実時間で換算しても10時間は費やしたかもしれません。
node.jsのバージョンが違っている?→node.jsをインストールし直しました。
node.js内で呼び出すbox-node-sdkのライブラリのバージョンが違う?→複雑な依存関係を解決しながら、複数のバージョンを何回もインストールしました。
でもうまく動きません。

実は、動かない理由はとても単純でした。

AWS Lambdaの関数の設定でタイムアウト設定があるのです。正常に動いている関数は10分以上の値を設定していたのに対し、動かず悩んでいた方の設定値は3秒でした。


これを見つけたのは、万策尽きたため、設定を一つ一つ全て見直そうと始めた途端のことです。
固定観念に縛られていたため、処理を間違ってしまった良い例です。

かつての私は、こう言う事をしょっちゅうやらかしていました。動かないと悩み、いろんなことを試した結果、実は単純なところに原因があったと。


少し前の私であれば、より早く関数自体やライブラリではなく、設定に意識が向いていたはず。それが出来なかったのは、私の頭がそろそろ硬くなっている証拠なのかもしれません。


その一方、こうした解決の手法を皆さんにも伝えておかなければと思いました。

バグが起きた場合、まず間違いなく理由があります。プログラムなのか、設定なのか。プログラムにこだわってしまうと、設定の違いに気づきません。逆もまた同様です。


その発想の転換をどうやって行うか。
私は新たな発想を散歩や別の作業を行うことで得てきました。全くちがう作業に脳のエネルギーを使うと、新たな発想がポカリと浮かぶことがよくあります。脳の働きの神秘です。
今までに私はこうやって行き詰まった実装を突破してきました。それこそ無数に。

皆さんも新たな発想を得るやり方を身につけると、実装がもう少し楽になるはずです。

ありがとうございます。 弊社としても皆様のお役に立てるよう、今後も活動を行っていこうと思います。