見出し画像

非ITエンジニアのための「IT版バールエンジニアリング」のすゝめ

※この記事は hey アドベントカレンダー2020の20日目の記事です。すごい、202020だ!

はじめに

はじめまして! STORES(ストアーズ)のビジネス部門という鯛の口の中でひっそりと生かされております、白濱です!ダイレクトセールスというチームでマネージャーをさせていただいております。メンバーの皆様、いつもお世話になっております、ありがとうございます。

さて、今回、「何書いてもOK!」ということだったので人生初アドベントカレンダーに挑戦することにしました。何書こうかなー、つか何書いてもOKなんですよね?後悔しませんよね?というスタンスで、私が週に1日は食べている、今、家系ラーメンで多分一番うまい店こと渋谷「侍」の事か、サクラ大戦が好きなもので、「新サクラ大戦」についてSEGAさんに意見表明かどっちかかなーと思っていたんですが、やっぱり当然みんなIT企業っぽいこと書くので郷に入っては郷に従えということでそれっぽい内容を書いてみたいと思います。
なお、渋谷の侍はマジでうまいので、喉味(スープを飲み下したときに喉でも味を感じる様子を示した言葉。読みは「のどあじ」)なので皆様におすすめしたいのですが、最初は必ずスープ薄めで注文して下さい。本当にこれだけはお願いします。「いつもラーメンは濃い目だから〜」みたいな人も薄めを注文して下さい。あと不定休なので行く前は必ずtwitterを確認して下さい。

ということで今回は表題の通り、「IT版バールエンジニアリング」(以下、バールエンジニアリングと呼称)について書いて参ります。

なお、この内容、正直怒られ発生する可能性あるなあと思っており、その場合は以下に侍がどれだけうまいラーメンか書いてあると思いますのでその際はお察しください。

バールエンジニアリングとは

さて、「バールエンジニアリング」とはなにか、ご存知ではない人も多いと思いますので説明をしていきたいと思います。横文字ですので言葉自体は新しい、しかも私の造語ですが、なんとこの言葉が指すものについては古事記に記述があります。

鏡に写る自分の姿をその貴い神だと思った天照大御神が、その姿をもっとよくみようと岩戸をさらに開けると、隠れていた天手力男神がその手を取って岩戸の外へ引きずり出した。(wikipediaより)

そうこの部分です。この部分が日本最古のバールエンジニアリングの記述であり、天手力男神こそが記録上の日本最古のバールエンジニアリングの使い手だということになります。すごいですね。余談ですが、以上を根拠としてバールエンジニアリング神社の祭神も天手力男神となっています。

そもそも、エンジニアリングとは繊細かつ深奥な知識を要するものであるはずです。ここ100年ぐらいの飛躍的な科学技術の発展と先人からの積み重ねにより作られた現代の様々なモノを、同じだけの知識をもって把握し、意のままに操ったり修理したり新しいものを生み出したり、そうやって歴史的積み重ねに参加していく営み、それがエンジニアリングであり、その魔法を使う魔法使いのような存在がエンジニアだと思います。
それには当然然るべき教育や経験が必要であり、それこそがエンジニアという人々の付加価値・特異性になるわけですが、そうではない人間が一朝一夕に生半可な知識を学んでもうまくいかないと思われています。では、そんな繊細な魔法の鍵穴を開けることの出来ない僕らは、宝箱の中にある恩恵にあずかることは出来ないのでしょうか?

NO!そんなことはない!魔法の鍵穴が開けられないなら
アンコモンの宝箱くらいまでならバールでこじ開ければいいじゃない!!!!
(天照大神が出てこないなら扉を開けさせて引きずり出せばいいじゃない!!!)

これがバールエンジニアリングの基本的な考え方になります。
「テレビをぶん殴って映るようにする」「振ると携帯の電波状況が良くなる(気がする)」ということに近いです。

もう少しきれいかつ穏便な言葉でまとめると
──────────
1. 技術的ハードルが低いそこそこの課題を
2. 世の中にすでにある道具を使わせてもらい
3. 喩えでの理解など必ずしも正しくない知識を含む表層的な理解を基に
4. トライアンドエラーで成果を得る
5. ただし、対象にしていいものは自分の部屋にある自分の宝箱だけ
──────────
となります。

対象にしていいものは自分の部屋にある自分の宝箱だけ?

僕はWEBエンジニアではなくビジネス側の人間なのですが、前職でどうしてもエクセルのVBAマクロを習得する必要があったためそこを入り口とし、VBA → Google Apps Script(GAS) → Pythonと歩みを進めてきました。
なのでサービスの作り方とかサーバーの扱い方とかセキュリティとかなんなら正直まじで本当にPromiseの扱い方がどうしても理解できない、本職ITエンジニアからすると噴飯もののうんこマンなんですが、それでもVBAやGASがちょっと書けるだけで業務の効率や生産性向上に大きな力を発揮してこれたと思います。「システム」が作れなくても「スクリプト」で仕事は変わるし、ITエンジニアほどにいろんなことが理解できていなくても僕らが思う「こうだったらいいのになあ」は意外と実現できる!そういうことを広めていきたいというのが「バールエンジニアリング」の主旨になります。
そのため、上では少々過激に書いたのですが、どんなリスクが発生するか分かっていないを扱うという前提のため、どんな事があっても会社や他の人に迷惑をかけない範囲でしか遊んではいけません。
例えば、AWSとかGCPなど本物のITエンジニアたちが触っているものは正しい知識を得るまで手を出すのは絶対にやめましょう。トークンが漏れてbitcoinを掘られ、とんでもない請求が来るかもしれません。また、そうそう出来ることではないと思うので大丈夫だとは思いますが会社等の何らかの本番データを直接触ることもやめましょう。デジタルデータは何の実感もなく突然簡単に全て塵も残さず消え去ります。そう、あのときの片思いのように。

じゃあどこで実践すればいいの?

そんな場所、モヒカンをはやした屈強な男たちがバギーを乗り回すこの修羅の国に存在するの?いやあるんですよそれが。我々のような半端者でもある程度安心して遊べる公園が。それこそがGoogleのサービスにおいてエクセルでいうところのマクロの立ち位置にあるGoogle Apps Script(GAS)です。理由は色々ありますが、ざっと挙げると
──────────
●身についたときに出来ることの幅がとても広い(特にGmailとSpreadSheetとDriveの存在がでかい。表示系はSpreadSheetで作れるし、簡易的なWEB APIも作れる)
●バッチ(設定通りに自動でスクリプトが起動するもの)が設定できる
●サーバーレスなのでプログラムを書くことに専念できる
●VBAと比べて書くのが楽だし他の言語の習得も易しくなる
●プログラミング環境のセットアップをしなくていいしエディタもある(使い勝手はめちゃくちゃ悪い)
●普通はスクリプトが6分以上使えないため無限ループとかで死を振りまく可能性が低い(featureにより30分使えることもあるがそれでも30分)
●セキュリティに安心感がある(もちろん、自分で判断できないうちは個人情報等のクリティカルなファイルは扱わないほうがいいです)
──────────

という感じでしょうか。逆に、GASは動作がなんだかんだいって遅かったり、デバッグがめちゃくちゃツラいので、会社がGoogle Workspace(旧Gsuite)を使っていないけどエクセルはすげーつかうんだよねーという方であればVBAでもいいかもしれません。しっかしこれはこれでめちゃくちゃ書きづらいという弱点がありますけど。setってなんやねんとか、なんで連想配列を入れ子に出来ないんですか(実は出来るの?)とか。

やっと本題

さて、以上を読んで多くの非ITエンジニアの方々がこう感じたと思います。「簡単そうに言うけどさあ?実際出来る気がしないんだが?」と。

これだけは断言できます!!!出来ます!!!!

世間にある入門書などの情報は当然、本職ITエンジニア向けやその登竜門として書かれており、正しく正確かつ網羅的に記載されています。喩えるなら、

まず宝箱のタイプを列挙します。この世に魔法の宝箱はケフェム型とショロッピ型、シェゴノン型がありますが、それぞれに使われている魔法材料にバリエーションが有り、キョニャーク、ビヌウェッス、ジョケポアクとあるためジョフグイするときにはワグイフッソする必要があります。

みたいなことがすごいたくさん書いてある感じですね。

当然こういったことはその先をの魔法使いキャリアを考えると必要なのですが、今我々に必要なのは、

この手があったか!大体この辺の角をぶん殴ると開く!宝箱を最速で開けるたった一つの冴えたやり方!
これで開かなかったら諦めろ!石で鍵穴をむちゃくちゃ殴るコツ!
バールをねじ込むべき隙間はここだ!必見!蝶番の横の隙間を激写!

みたいな即物的かつ猥雑な情報なんですね。

ただ残念なことになんだかんだ言っても深層奥深いものを相手にするわけで、そんな即物的な情報を理解し、バールを振り回すためにも、最低限抑えておく必要のあるジェクェフッソやニュチオポロを理解する「筋トレ」が必要なのですが、この目的に特化した記述や説明というのはこれまで目にすることはありませんでした。(あるのかもしれないけど)

なのでこの記事ではその筋トレのプラクティスを余すところなくお伝え

したかった!!!!書き始めるときはそう思っていたんです!信じて下さい!!でも、この半分くらいどうでもいい情報しか書いてないここまでで既に3500文字くらいになっちゃってて既に12/17なんです。間に合わないんですどうしても!

なのでこの記事では、こんな事言ってる僕が今までどんなものを社内等で作って来たのかと、本当は何について書きたかったのかの目次を記し、以降は別記事でこれからちょこちょこ書いていこうと思います。ちなみに僕は今までどんなブログも3日以上書いた事がなく、ブログを数々使い捨てにしてきた人種のためそう簡単に書けるとは思えません。みなさんの「スキ」とブクマで僕に記事を書く元気を下さい!!!!

今までにこじ開けてきた宝箱

こういうのってサクッと事例だけ書いてもそのツールが生まれるに至った背景とか問題とかが分からないとあんまりよく理解できないと思うのですが、あなたが時々思う、「こうだったらいいのになー」の一部は実現できるようになる、と思います。

●Gmailでフィルターを作り、特定のラベルが付くメールを受信したらslackに通知を出す(提携メールの場合はその部分を抜き出してslackの通知に入れる)
●Gmailを読み取り、特定のメールに記載されている内容を自動的にスプレッドシートにまとめる
●Googleフォームが送信されたときにslackに通知を送る
●Gmailで差し込みメールの送信をする
●metabase(BIツール)からpulseで情報をGmailに送信させてスプレッドシートを毎日更新する
● STORES(ストアーズ)のオーダーCSVを他のサービスのWEB API(情報を取り出すための出入り口)から取得したデータを参照しながら特定の別サービス用のCSVに変換する
●slackとスプレッドシートの組み合わせで権限者に申請を報知し、その承認を記録できる簡易的な経費申請の仕組みを作る
●会社のパートナーがスプレッドシートに情報を入力し、特定のPDFを出力、メールで受け取れるようにしつつ情報をスプレッドシートにまとめる簡易な発注の仕組みを作る
●ゴミの日にLINEで「今日は◯◯ごみの日だよ!」とピカチュウが教えてくれるようにする
●振り込み情報がまとまっているCSVを各銀行の仕様に合わせた全銀フォーマットのCSVやtxtに変換する

WEB APIが公開されているようなサービスであればGoogleのサービスを中心に、それらをつないで許された範囲で何でも出来るって感じですね。イメージとしてはLEGOに近いです。ブロックは作れないが、予め用意されたブロックの種類がすごいあるから大体のものは作れる。って感じですね。

そして本題の今後書いていきたいことです。

予定:バールを振り回せるようになるために知るべきこと(GAS編)

1.  値と配列と連想配列
2. 変数とは
3. 関数とは
4. オブジェクト……?メ……メソッド……?(第一の峠)
5. ループの重要性
6. 実際に書いていくときのセオリーとデバッグ(第二の峠)
7. リファレンスの読み方
8. バッチの作り方
9. GAS外への情報の送り方
10. GAS外からの情報の受け取り方

書き出してみたら結構ボリュームありますね。もう既に書けるか心配になってきました。

おわりに

ここまで読んでくれた人の中には今までにプログラミングに挑戦したけど心折れまくってきた人もいるかも知れません。実は僕もその一人です。
20年くらい前、CGIチャットのプロフィールページに星を降らせるjsが全く意味分からず挫折し、CGI作りたいと思ってPerlの本を買うもマジで意味分からず、phpも「は?」となり、猫でも分かるC言語とかいうけどHello Worldを表示させるだけのコンパイルがどうしても通らず自分は猫未満なんだと絶望し、長らくの断絶を経てVBAに取り組みそれでもある程度分かるようになるまで1年かかりました。ですが、ある時、何かを掴み、突然分かるようになったのです。そこから先は霧が晴れたようにいろんなことが少しずつ見えるようになっていきました。
僕の敗因を考えてみると一点だけでした。それは「一人で文字情報を相手に頑張っていたこと」です。VBAで1年以上理解できなかったことも、それ以前の全てのつまづきも、隣に人間がいて会話を通じて教えてもらっていたら即解決できてこんなに時間はかかっていなかったと思います。自分の疑問に直接答えてくれる人がいるだけでプログラミングの入り口の時間はめちゃくちゃ圧縮できると思います。なので「今回もまたどうせ無理なんだろうな……」と思わないでほしいなと思っています。
と書くだけなのも無責任だと思います。そこで、レクチャーの記事を書いてすらいない状況ですが、そんな記事を読む前からGASの勉強をしていてでも苦労している人がいるかもしれないと思い、似たようなレベルで教えあえる場所があるととってもいいだろうなあと思って思いつきでslackのワークスペースを作ってみました。今参加者僕一人です。孤独です。平日は仕事の具合によってすぐに返事ができたりできなかったりだと思うんですが、興味があればぜひご参加下さい。

なんか期限が30日で切れるらしいので、だめになっていたら「stesseras@gmail.com」までご連絡くださいませ。

ここまで長々お読みいただいてありがとうございました。

実は同じアドベントカレンダー内で同日にもう一つ記事を書いている人がおりまして、STORES のセキュリティエンジニア @yokoyama による「社内セキュリティ勉強会のはなし」です。下書き読ませてもらったんですが、半端もんには難しい!でもセキュリティは少しでもサービスとか作ってみたいなーと思うと大事になってくるとこなのでちゃんと理解したいところですね。SQLインジェクションとかXSSとか怖い!ほんまもんのエンジニアの方がいらっしゃいましたら、そちらもぜひ御覧ください。

そして明日は STORES 決済のプロダクトマネージャー Masako の『元事務職のプロダクトマネージャーが感じる「PMの楽しさ」と「いまの課題」』です!わくわく





この記事が気に入ったらサポートをしてみませんか?