コンパクトでない空間

a good experience become even better when it is shared

受け入れ先企業は神ではない話

8月に行ってきたインドのインターンシップで、学んだことのハナシ。
期間は3週間。日本においては長めのインターンシップだが、
海外においてはむしろ随分と短いほうにはいる。
この三週間、ほんとうにたくさんの人に、
お世話になって、迷惑をかけて、許されて、構ってもらって、
貴重な経験をさせてもらったと思う。

経験はシェアするべきだ。
ずっとインターンシップについて記事を書きたいと思いつつも、なにを書こうか迷っていた。
インターンシップ中に解決した技術的問題について、
ほんとに具体的な技術的記事を書いてしまうという手もあったし、
それは未だに後で書いてもいいと思っているのだけれど、
私が書きたいこと、みんなに伝えたいことはもっと他にある気がしていた。
未だにその正体がつかめたとは思っていない。
それでも、インターンシップに行く前と後では私の考え方は変わったと思うし、
その考え方を、わかってもらえるにしろ、もらえないにしろ、発信したいと思ったのだ。

インターンシップに行く前の私は、受け入れ先の会社はずっとたくさんのノウハウがあって、
マネジメントでも技術的なものでも私なんかでは及ばないたくさんの正解を知っていて、
その人たちが手間と時間を割いて受け入れてくれるというのだから、迷惑をかけてはいけない、と
会社の人の言うことは絶対で、逆らってはいけない、と思っていた。
実際にそういう気持ちでいた方がうまくいく企業というのはあるのだろうと思う。
でも、私がお邪魔させてもらったFidelテクノロジーズはそうではなかった。

一つの小さな例として、再三言われた言葉がある。
「日本では他の人がやっていることを邪魔して質問するのはよくないのでしょう?
でもインドでは、違うから。なにか躓いたら遠慮なく何度でも聞きなさい」
そもそもそこからして、私のイメージしていたものと違っていた。
実際、躓いたらすぐに聞けた方が効率がいいと思う。
これは比較的受け入れやすく、すぐになじめた違いだった。
もっと、最後の最後まで違和感として残り続け、
なかなか理解して呑み込めなかった違いがある。
それは、受け入れ先企業は神ではないし、万能ではないし、
間違えることだってある、ということだ。

時系列順に私が経験したストーリーを説明しよう。
着いてまず、私が最初に言われたことは、「AndroidiOSのテスト自動化システムを作れ」だった。
期間が3週間と短いから、細かいテストケースやオプショナルな機能はつけなくていい。
最低限動くフレームワーク*1を作れ。
必要なパソコンやソフトウェアは言ってくれればこっちで用意するから、
何が必要かも自分で考えて決めてくれ。
私もAndroidiOSのテスト自動化システムを作るのははじめてだから、わからない。
Webアプリのテスト自動化を行った技術者を担当につけるから、
彼に相談してアドバイスをもらいながら進めてくれ。
「テスト自動化システム」の具体的な要件の説明などはあったけど、
要約するとそんな感じの指示だった。

この時点では、私はまだ、「自分たちにもわからない」といいつつも、
この技術者指導者さんの頭の中には正解にほぼ近いものが既にあって、
彼がうまいこと誘導してくれるから、私は自分からたたき台を作るとか、
積極的に動いている姿勢を見せつつ、うまいことその誘導に乗ればいいのだろう、と思っていた。
あれ?と思ったのはだいぶ先になってからだった。

仕事は難航した。
テストケースデベロッパー向けのインストールの資料を渡され、
指示されたとおりにいくつかのソフトウェアをインストールした。
ビルドツールはGradleを使うように指示されていたし、
インストールの資料にはeclipseとUIテストツールのAppiumが入っていたので、 それら3つを含むフレームワークを提案し、
GradleとAppiumの連携は具体的にどうすればいいのか、と技術指導者に相談したら、
Appiumはテストツールというよりむしろ既存のエミュレーター*2との連携をサポートするサーバーであることを説明され、
jenkinsのe-mail通知の設定の説明をされた。
このときの私は、この説明は一見私の質問と関係ないように見えるけど、
きっとそれは私の理解が足りてないだけで、
関係のあることなのだろうと思っていた。
技術指導者の人が一通り説明をし終えて帰ってしまった後、一人でもう一度考え直し、
それでもやっぱり理解できないので、もう一度聞きに行く。
そしてまたまったく違う説明を受けて、その意味を一人で考えて、
やっぱりGradleとAppiumの連携ができないので、聞きに行く。
そんなことを繰り返していた。

私が、自分の認識の間違いに気づいたのは、質問しやすいようにと、
彼の隣のデスクに移動させてもらえたときだった。
Android Studioと、Gradleと、Appiumの連携の情報ならあるけど、eclipseはない」*3 と言ったら、見せてくれ、そのURLを送ってくれ、と言われた。
そこではじめて、彼もGradleとAppiumの連携の方法がわからないんだ、とわかった。
そうだ、彼だってわかってたわけではなかった。
だから、質問しても答えがわかるわけがない。
彼自身も、きっと、自分自身だってできるかどうかわからない仕事を、
言われるがままにマラーティー語*4も話せない小娘に指導しなければいけなくなって、困っていたのだろう。
つまり、私は、本当に自分自身の力でフレームワークを作る仕事を任されていたのだ。
それが、プロジェクトリーダーの意図通りだったのか、
プロジェクトリーダーは技術指導者がわかっていると思っていたのか、今となってはわからないけれど。
プロ意識を持って、その仕事を完遂してみせなさい、と言われたような気分だった。
誰かに金魚のフンとしてくっついていくだけではダメだと、金魚は保証をしてくれない、と。
アドバイスが信用できるかどうかまで自分で責任をもって判断しなければならなかったのだ、と思った。

結局、Appiumの自動起動ができない問題自体は
彼がeclipseプロジェクトのmainからappiumを起動させるbatファイルを呼び出すことで解決していた。
本来なら、Appiumを自動起動してくれるようなプラグインをGradleに入れるのが
きれいなやり方なのではないかと思っているが、
検索してそれっぽいプラグインを入れてみても、自動起動はしてくれなかった。
すぐに、Appiumはスクロール機能などに問題が多く、
UIAutomatorなど他のUIテストツールと併用する必要があることがわかったため、
Appiumの使用自体を諦めてしまったので、
もしかしたらもう少し頑張って探してみればなんとかなったのかもしれない、と今は思う。
いずれにせよ、多分、Appiumは単体で使うためのツールではない。
そういうブランドってあるでしょう、ユニクロとか。
どうやら、内部でUIAutomatorを使っているらしいので、
感覚としてはUIAutomatorと併用するならライブラリに近いものなのかな、と思っている。

そもそも、思ってみれば、eclipseとGradleを連携させるのが茨の道だ。
楽にいきたいならAndroid Studioがいい。絶対そうだ。Gradleがそのまんま使える。
当時の私はテスト自動化なんて言葉自体はじめて聞いたよってレベルだったので、
資料にあったソフトウェアをインストールし、技術指導者の指示に従ってeclipseを使っていたけれど、 誘導に乗っかったつもりが、完全に茨の道に引きずり込まれていた。
全体の方針は大きく間違えないようさりげなく指導されて、
保証された牧場のなかで自分にできることをすればいい、という認識は端から間違っていたらしい。

そんなわけで、私が学んだことは、インターンシップ受け入れ先だってなにも神じゃないし、
完璧じゃないし、知らないことも間違えることもたくさんある、ということだ。
なにも悪口のつもりで言っているわけではない。人間なのだから当たり前のこと。
インターンシップ生は、インターンシップ先の誘導や指示におんぶにだっこにならずに、
こちらからも、相手の状況を把握して、
ともに仕事をするインターンシップというイベントでお互いのためになにができるのかを、
積極的に考え、提案するべきなのだ。
それが、よく聞く
「受け身にならずに、積極的な行動をしろ」
という言葉の意味だったのかもしれないな、と今なら思う。

受け入れ先が必ずしも上手に仕事を振って誘導してくれるわけではない。
学生と毎日触れ合っている大学の先生ですら、
学生がどこまでできるのかの認識を誤って、
テストを難しくしすぎたり、簡単にしすぎたりして、
きれいに点数がバラつかないテストを作ってしまうことはよくある。
インターンシップなんて、大学を卒業して久しい、
学生と触れ合う機会なんてここ何年、十何年もなかった人たちが企画しているのだ。
もう自分が大学生だった頃のことは忘れているかもしれないし、
時代が違えば受け入れ先の方々が大学生だったときと今の大学生は違うかもしれない。
専攻だって違うだろうし、当然のごとく、
学生にできることといっても一人一人得意不得意もできることも全然違う。
自分たちにとって、会社というものがなにもわからないブラックボックスであるのと同様に、
受け入れ先から見たら、私たちインターンシップ生はブラックボックスなのだ。
会社内の常識だって、きっと、どこまでインターンシップ生がわかってて、
どこがわかってないのか、わからないことだってあろう。
自分がなにを知っていて、なにを知らないのか。なにができて、なにができないのか。
ただやれと言われたことをやるだけではなく、こちらからも発信して、
コミュニケーションをとり、すり合わせていく必要があるのだ。

ちなみに、心に残っている言葉がひとつある。
そんなこんなで、私はいろいろと技術面ではない部分で苦労をしながら
Androidアプリのテスト自動化のフレームワークを作り、
インターンシップの最終発表日に、その使い方やそのツールが優れている理由をプレゼンした。
面識のある直接の上司も、面識のないなにやら偉そうな人も何人かが聞きに来ている中で、
もう、こっちとしては、ほんとうにこのフレームワークで大丈夫なのか、
彼らの方がもっとプロフェッショナルで、
こんなんじゃダメダメだと言われるんじゃないか、とどきどきである。
一通り発表が終わり、厳めしい顔をした人が手を上げて、私のプレゼンへの感想を述べてくれた。
彼は、ニコニコして、「So, you learned a lot」と言ったのだ。
You learned a lot.
日本語で言うなら、「そっか、いっぱい勉強したね」みたいな。
彼はそれ以上とくに言及するでもなく、プレゼンはそのまま終わってしまった。

あ、それでよかったんだ。
私の勉強になりさえすれば、結果的にできたフレームワークがよくても悪くても大した問題じゃなかったんだ。

全てのインターンシップがこうなのかはわからないけれど、
このインドにおける三週間で、私のインターンシップに対するイメージが変わったのは間違いない。

*1:枠組み、構造と訳される。要は最低限でいいということ。

*2:異なるOSの上で他のOSを再現するソフトウェアこと。この場合Windows上でAndroidのOSを再現する。

*3:Android StudioeclipseはどちらもIDEと呼ばれるソフトウェアを開発するためのツール。当時はAndroid Studioではなく、eclipseの方を使っていた。

*4:インターンシップ先、プネの現地語