SE2年目の自分は客観的に見て、思っていた以上にスキルが低かった

 タイトル通りですが、自分はずっとスキルが広く浅い方だと思ってやってきました。業務があまりに雑多だからです。詳細設計・開発・テスト、かなり凝ったExcelのマクロツール、PCキッティング、基本的なLinux操作、基本的なサーバーセットアップ、基本なネットワーク構築、他社製品のサポート、営業支援、保守業務、、実業務1年数カ月の間に、これら全てを少しずつ扱ってきました。言語でいえば、VB.NET, VBA, VB6, javascript, COBOL, Javaを業務内で触っています。

しかし、この中でスキルと言えるほど扱えるのは、よくよく考えれば、VB.NETのプログラミングくらいなものです。それもせいぜい初級~中級レベルでしょう。僕はこの事実にある程度気付きながら、やはりどこかで目を反らしていたのだと思います。だからこそ、無意識に抱える技術不足というルサンチマンに従って、色々な技術書を読み漁る(嘘です。漁るほどではありません。)のかもしれません。

今ならはっきり言えます。広く浅くなんてきれいごとで済まされず、僕には経験者として評価されるスキルなど殆どありません。薄々そんな気はしていたのですが、転職エージェントの方と面接して確信しました。SI業界では、一部の企業だとは思いますが、プロジェクトを回すのにプログラミング能力などの末端スキルが必要ないと言われます。私の今居る会社は間違いなくそういう考え方ですし、私も技術好きではあるのですが、何処かでそういう考えを持っていました。しかしこれは完全に間違っています。正しくは、「特定のプログラミングを始めとする技術的なスペシャリティを持ちながら、マネージメントも出来る」必要があるということです。よく考えれば超当たり前ですよね。技術者が技術無くして何になるのかということです。

これはSI業界が間違っているというよりも、SI業界の平均年齢層かやや高年齢層に、そういう考え方の人が多いからだと思います。当時でそれでうまくいっていたのでしょう。私の居る会社は平均年齢層がかなり高いため、そういう考え方が蔓延しているのかもしれません。いずれにせよ、技術の習得は今後必須だと思います。下請けさんに仕事をぶん投げて、人月に従ってプロジェクトだけ回していればお金が儲かるという時代ではないと思うからです。

完全に恐ろしくなって参りました。と同時に、転職を決意しました。幸い、超売り手市場であること、コミュニケーション能力は高く見られること、低レイヤ高レイヤまで技術書をかなり読んできたこと、自分でドメインまで取ってWEBを公開した経験があること、、、稚拙ながら努力はしてきたため、アピールはできます。第二新卒枠であれば、何とかそこそこの所に入れるのではないかという希望的観測を持っておりますが、如何に・・・。

皆さんも客観的なスキルの棚卸を積極的に行い、本当に大丈夫か確認することをお勧めします。私は転職を頑張ります。

コンピューターサイエンスを学び直したい

 最近常々考えるのは、コンピューターサイエンスを学び直したいということです。学び直すといっても、僕は農学部出身ですので、そもそも学んでないませんけどね。なぜそう思うか。ネットワークを弄っていても、.NETでプログラミングをしていても、SQLでDBを弄っていても、何か物凄く宙に浮いている気分なんですよね。.NETというフレームワークも、OracleというDBも、TCP/IPというプロトコルでさえも、どこかの誰かが考えて作った産物にすぎません。

そういったパーツもといツールの知識を深めて、実用的に使えるようにするというのは、お金を生み出したり、表現活動をする上で確かに重要なことです。しかし、いくらパーツやツールの使い方が分かったとしても、それが実体としてどういう動きをしているのか、僕には今サッパリわかりません。最近それが異常に気持ち悪く感じてきてしまいました。特に自分がIT業界の技術職という、言うなればコンピュータのプロフェッショナルの1人として仕事をしているにも関わらず、この程度かと悔しくなるわけです。

使い方や特性は分るものの、その動作原理が全くわからない。TCP/IPのパケットの大まかな構成は分かるけれど、データとして中身はどうなってるのか、何故そうあるのがベターなのか、全然理解していません。お金を稼ぐことや、目先の業務で結果を残すことは重要ですが、仕事をする人生はあと40年くらい続くのです。その間ずっとITに関する仕事をしていくとして、全く意識をしなければ、恐らく40年後も今と同じ知識レベルにあるでしょう。高レイヤへの知識が増え、自在に使いこなせるようになっているかもしれません(あり得ないと思いますが)。しかし結局データ構造や低級言語のことは分らないまま終わるでしょう。

これがやっぱりどうしても気持ち悪いと感じるわけです。40年働いてこれかと。僕はきっと思いますね。だから本格的にコンピューターサイエンスを学び直したいと思ったわけです。そこで、色々方法を考えたのですが、まずはここら辺を皮切りにしていこうと思います↓

qiita.com

↓アマゾンのリンクです。嫌な方は触らないようにお願いします。

無料で大学の授業を視聴できるサービスがあるようです。天才でもない限り、よく理解していて説明の上手い人の話を聞くのが一番手っ取り早いです。まずはここから手を付けていきたいです。あとはC言語でコンピュータを理解する本なんてものを見つけたので、早速Amazonでポチりました。どちらもガチガチの専門書を読むよりは負荷が軽いと思うので、まずはここら辺からですね。その後、徐々に専門的な内容に入っていきたいと思います。

とは言いつつ、お金を稼ぐための仕事を続ける必要がありますから、そのための勉強もしなければなりません。例えば、最新事情にもある程度通じている必要があります。実は今、ニュースまとめのオモチャみたいなサイト作ってまして、それを運営することで知識を保とうと思っています。Webっぽいことをしてみたかったので、本当にショボいですけど、ここ数カ月弄っていました。もうすぐリリースできそうです。

来年はコンピューターサイエンス寄りの知識習得に努めると共に、SEとしても3年目に入るので、飛躍の年にしたいと思います。

ダサいけど便利な.NETのFormを解剖してみる①~起動させてみる~

 単なる出来心でWinFormアプリを解剖してみることに。なお、Formとは Form クラス (System.Windows.Forms) のことを指します。↓みたいなやつですね。

f:id:tadanoteihen:20171206184856p:plain

Windowsの使用者なら、似た画面を見たことがあると思います。これを使うと、手軽にデスクトップアプリを作ることができるので非常に便利。特にVisual Studioという開発環境を併用すると、ちょっとしたツールならあっという間に作れるので、プログラミング初心者にもおすすめできます。

とりあえず作成・起動してみる

 今回は解剖ということで、最初はVisualStudioを使わずに作ってみましょう。まずは画像から。言語はVBを選択。

f:id:tadanoteihen:20171206185556p:plain

Imports System.Windows.Forms

Public Class Class1

    Shared Sub Main()
        Application.Run(New Form)
    End Sub

End Class

f:id:tadanoteihen:20171206190034p:plain

vbc form.vb

f:id:tadanoteihen:20171206190328p:plain

f:id:tadanoteihen:20171206191122p:plain

こんな感じで、のっぺらぼーなWinFormが起動します。意外とあっという間ですね。では解説ということで、まずはソースコードを見てみましょう。.NETのエントリーポイント(プログラムが開始するポイント)は、Mainメソッドです。Class内で宣言すればよいし、VBであればModule内で宣言してもよいです。画面の表示は「Application.Run(New Form)」と一行書くだけ。コンパイラVBならばvbc.exe、C#ならばcsc.exe。コンパイルすると同じフォルダにEXEファイルが出来上がるので、ダブルクリックすれば起動します。

項目を追加してみる

 もうちょっとVisual Studioを使わず頑張ってみよう‥・。まっさらな画面に、「なういぜWinForm」と表示させてみます。要は記事の一番最初に乗せたやつですね。ソースコードから入ると、、、

Imports System.Windows.Forms
Imports System.Drawing.Point

Public Class WinFormKidou

    Shared Sub Main()
        Dim winForm As New winForm
        winForm.nauiLabel = New System.Windows.Forms.Label
        winForm.nauiLabel.Text = "なういぜWinForm"
        winForm.nauiLabel.Name = "NauiLabel"
        winForm.nauiLabel.Location = New System.Drawing.Point(75, 75)
        winForm.nauiLabel.Size = New System.Drawing.Size(100, 100)
        winForm.nauiLabel.AutoSize = True
        winForm.Controls.Add(winForm.nauiLabel)
        Application.Run(winForm)
    End Sub

End Class

Public Class winForm
    Inherits Form

    Public nauiLabel As Label

End Class

まずは下の方で宣言しているwinFormクラスを見てみましょう(ミスって頭文字を小文字にしたけど気にしない)。これは標準のFormクラスを継承して、フィールドを一つ追加しているだけ。追加したのはLabelで、これが「なういぜWinForm」となるわけです。 つぎにWinFormKidouクラス内のmainメソッドを見てみしょう。下で宣言しているwinFormをインスタンス化して、内部のフィールド「nauiLael」に新しいLabelクラスのインスタンスを渡しています。続けてnauiLabelのプロパティを設定し、最後にApplication.Runで画面を起動しています。なお、nauiLabelをControls.Addしている点に注意。これをしないとラベルが表示されません。

長くなってしまったので一旦閉幕。ひとまずWinFormの1から自力で書くとこんな感じになりました。今後こんな風に1から書き始めることはないでしょうが、一度やってみるのも面白いと思います。Visual Studioでプロジェクト追加して、ドラッグアンドドロップで適当にコントロール(WinFormの部品のこと。文字とか入力フォームとかボタンとか)を配置して作っていくのが普通だし、特に役立つこともありませんが、知っておくとウンチクを後輩に披露できる程度には使えるかもしれません。

ITエンジニア志望なら最初はインフラ系がおすすめ

 ITエンジニアと言っても、色々な立ち位置がある。システムエンジニアプログラマー、ネットワークエンジニア、サーバーエンジニア、DBエンジニア・・・。僕は個人的には、ネットワーク・サーバーエンジニア、次点でDBエンジニアをおすすめしたい。いわゆるインフラ系といわれる分野である。かくいう僕はシステムエンジニアプログラマ寄り、いわゆるアプリ系のエンジニアである。

アプリ系は競争が激しい

 アプリ界隈というのは非常に競争が激しい。参入障壁があまりにも低いからである。PCさえあれば、低スペックでも便利なエディタをインストールして、すぐにプログラミングを始めることができる。最近では、家事の片手間にスマホアプリ開発をする主婦までいるそうだ。競争が激しい=扱っている人が大勢である故に、技術の進歩・・・というか流行り廃りが激しい

javascriptであれば、やれAngularだ、Reactだ、jqueryはダサいだ、CoffeeScriptがなんだ、TypeScriptがなんだ。PHPであれば、fuelがなんだ、CakePHPがなんだ、最近はLaravelとSymfonyの2強だなんだかんだかんだあんだああああああ!!??読み易くて動けば何でもいいじゃねえか!!一々新しいもん作ってんじゃねええええ!・・・とか思ってしまう、僕のようなダメエンジニアが生まれるのも納得なミーハー具合である。

そして、そういうスピード感に何のストレスもなく付いて行き、尚且つコンピューターそのものに対する理解もずば抜けているような、基地外という他ないエンジニアも、この界隈には多いのである。知能・好奇心・ITに対する興味などを含め、初期スペックが我々と全く違うと言ってよい。それがアプリ系エンジニアの難しさである。

もっとも、数学や統計学が得意でデータサイエンス的な分野を扱えるとか、特に難しいアルゴリズムを実装できるとか・・・僕には想像もつかない分野であるが、そういった別の専門性を有しているのであれば、また別の話かもしれない。

インフラ系は参入障壁が高い

 今はレンタルサーバーもあるし、クラウドもある。インフラ系だって誰でも弄れる時代だ。なんて思うかもしれないが、レンタルサーバーなどの環境を借りるのには、やはりお金がかかる。大抵は月額費用であり、一般人からすると大きな障害になる。無料のレンタルサーバーも存在するし、個人で扱う分には概ね事足るが、そこで出来ることなどエンジニアというレベルではたかが知れている。

個人でLinuxベースのサーバーを借りてWebを公開、なんてこともできるが、特に難しいことは何もない。単にWebサーバーを立てて、そこにCGIを置き、DBを立て、SSHを有効にし、SSLの設定をして、セキュリティ周りを一通り確認して、公開するだけ。Google先生と少しばかりの書籍から習得できる。個人でやるのはそのレベルである。

サーバーの冗長化、ネットワークの構築、DBのチューニング等々のお話は、よほどデカいサービスにでも育たたなければ考える必要もない。しかし職業エンジニアとなった時点で、そういう考え方は必須になる。つまり非エンジニアとエンジニアで明確な差ができる部分なのである。

インフラから入った方が効率が良い

 スマホ界隈については知らないが、業務システム開発にせよ、Webサービス開発にせよ、アプリ開発をしていれば、HTTPを含めたTCP/IPやデータベースといったインフラ、ミドルウェア寄りの要素を確実に扱うことになるだろう。こういった時、より低レイヤ―のことを先に理解しておいた方が、往々にしてアプリなどの高レイヤー技術は理解しやすいものである。

 僕が会社に入って一番最初に携わったのは、Oracleというデータベースと頻繁に通信するアプリケーションの開発であったが、tnsnames.oraの中身が何を意味するのかしっくりこなかった(tnsnames.oraとは、ざっくり言うとPCからoracleサーバーへ接続するための、接続情報が記されたファイルである。)。それも結構長い間である。ググれば出てくるし、言葉はわかるのだが、しっくりこない。理由は単純で、TCP/IPに対する理解が無いからであった。TCP/IPという決まりの中で、データーがどういう風に流れるのか、イメージができなかったのである。

あまりに分からないので、マスタリングTCP/IPという、ネットワーク初学者のバイブル的な本を読んだり、データべースに関してまとめられた専門的なサイトを梯子したりして、インプットに努めた時期もあった。そうしてようやく、プログラミングの中でやっている外部的なデータの流れがイメージできるようになったのである(あくまでも最低限の知識ではあるが)。

逆に言うと、低レイヤの知識を先に突っ込んでしまえば、プログラミングなどをする上での障害が取り除かれやすくなり、効率的に学ぶことができる。なお、ここでインフラと呼んでいる分野も、データ処理の話であるため、結局はアプリケーション(C言語などによって実装される)の話になってくるのであるが、それはより専門的な方々に任せておけばよいと思う。

最終的に広い知識が必要

 インフラとアプリを区別してきたが、近年はインフラとアプリの距離がグッと近づいてきている。仮想化技術、クラウドの発達によって、難解な設定をせずとも、GUIでポチポチやればサーバーやネットワークを立てられる時代になってきた。アプリケーションも同様に、開発効率の上がる仕組みがどんどん出来上がってきている。

こういった状況を突き詰めると、一人当たりの生産力が非常に高くなる。一人でインフラの構築からアプリの開発・連携まで出来るようになるということである。それは専門性が浅くなるというわけではない。より優れた開発・運用にあたって、アプリ・インフラ双方の知識が深く必要になるということだと考えている。具体的に言えば、整頓された保守性の高いコードを高速に書く力と、インフラ技術に対する(構築技術ではなく)体系的な知識・経験であると思っている。

長くなってしまったが、ITエンジニアを志望しており、貴方が特段別の専門性(特に理系的な)を有しておらず、アプリ系(プログラミング)かインフラ系か迷っているorどちらでもいいと思っているのであれば、インフラ系から入ることをお勧めしておこうと思う。

Windowsで既存EXCEL資源を操作するならVBAが安牌

 この間、既存のExcel資源を操作するツールを作ってほしいと急遽頼まれた。自社内ではなく、お客さんが使用するもので、注文書まで貰っているとのこと・・・。納期まで営業日は数日。正直、うっ・・・と思ったのは言うまでもない。経験のある人はご理解いただけるかもしれないが、作成済みのExcelを操作するのは非常に骨が折れるのである。色々調査・試行した結果。結局は古き良きVBAが最適であると判断した。今回はそこに至った知見を簡単にまとめておきたいと思う。

OSSによる作成済Excel操作はやめておけ

 Excelを新規で作成して書き込むのはあまり難しくないオープンソースを用いれば、世の中に出回る様々な言語で簡単に実装できてしまう。しかし、面倒なのは既存Excel資源に対しての操作である。単に書類のフォーマットに利用しているとか、簡単な計算式が入っているとかであれば、そんなに問題はない。しかし複雑なグラフを描いていたり、各種Excelの機能をふんだんに駆使していたりすると、途端に問題が発生する。

そもそもExcelが開けないとか、プログラムで弄ったExcelが壊れたりだとか・・・さらにはファイルの種類(xls, xlsx, xlsm)によって出来たり出来なかったり・・・あらゆる問題のオンパレードである。しかも大抵は原因が突き止められない。そういう問題が起きるものだから、仮にテストで上手く動いたとしても、お客さんに納品できる勇気はない。作成済みExcel操作は精神的にもリソースを食うのである。

VBAは書きたくない

 それなら仕方がない。MS標準でモジュールの出回っているものを使って作成しよう、と考えが改まるわけである。真っ先に思いつくのはVBAだろう。なんせExcelに付随している開発環境であり、最も安心感がある。しかし、あなたが腐っても(おっと失礼)ITエンジニアであるならば、おそらくVBAなんて死んでも書きたくないと思うに違いない。古臭い文法に固定された開発環境、そもそもVB系なんて触りたくもない等々、あらゆる罵詈雑言を発したくなる気持ちは分かる。

無論、僕だってそうである。じゃあ他の方法でやろう。そうだ、せめて.NETで!そう思って着手し始めるわけであるが・・・。

.NETでのExcel操作はNPOIが最適らしい

 .NETで書こうと決意して色々調べてみると、Excelを弄る方法としては大きく分けて2つの方法があることが分かった。1つはMicrosoft.Office.Interop.Excelという公式COMを利用するという手、もう1つはNPOIというオープンソースを用いるという手だ。今回はまずは後者を使う方法を考えた。

え?オープンソース使わないんじゃなかったの?と言われそうであるが、NPOIはJavaExcel操作をするためのPOIというライブラリを.NET用に移植したものであり、このPOIはJavaの世界で15年の実績があるシロモノだということで、「イケるっしょ!!!!」と思ったわけだ。

しかし案の定その道は一瞬で閉ざされることになる。お客さんから事前に貰っておいたテスト用ファイルで試してみると・・・あれ?開けない。どうやら貰った3種類のファイルの内、1枚だけが開けない。無論、この3種類以外のファイルもあるわけで・・・。もしかすると抜け道があるのかもしれないが、急遽頼まれて納期が数日後に迫った案件であったため、試行錯誤している時間は無く、敢え無く断念

残るはMicrosoft.Office.Interop.Excelを使うという道のみ。何故コイツを最初に使わなかったかというと、「悪名高かった」からだ。詳しくは以下の記事を参考にしていただきたい。 qiita.com

記事で語られているように、Comオブジェクトの解放漏れが起こる可能性、一々裏でExcel.exeを起動する必要がある故に動作が遅い・・・等々、出来れば使いたくなかったわけである。しかし背に腹は代えられぬ。これで行こうと思ったわけであるが・・・。

Excelバージョン毎にCOMのバージョンが異なる罠

 Microsoft.Office.Interop.Excelは、なんとExcelのバージョン毎にCOMのバージョンが異なるのである。詳しくは、公式の情報(リンク)を参考にしてほしい。ひとまずお客さんの環境について確認してみると、どうやらExcel2010. 2013, 2016が混在している環境とのこと。途端に雲行きが怪しくなってきた。

じゃあ互換性はどうなんだろうと調べてみると、公式の情報(リンク)が出てきた。これによると、概ね上位互換性があるということ。だがしかし、僕のPCのExcelバージョンは2013である。COMは基本的に開発環境に入っているExcelのバージョンに対応したものしか利用できない。僕が作れるのはExcel2013に対応したプログラムだけであるということだ。2016は動く可能性が高いが、2010についてはあまり保証できないということである。

厳密にいえば対策は取れるかもしれないが・・・時間がない。VBAで書くこう。結局そこに落ち着いたわけである。

安定のVBAさん

 結果から言うと、これで無事に解決した。Excelのバージョン毎にVBAにも違いがあるようだが、基本的な機能であればほぼ互換性があるという見方をして良さそうだ。しかしやはり不具合が出ることもあるようなので、以下のような記事を参考にするなどして、リスクを減らした方がよいだろう。

www.stdio.jp

VBAで事なきを得た後も、少々調べていた。やはり皆さん色々苦労されているようで、以下のような記事も見つかった。

qiita.com

この方はJscriptが最適解と踏んだようだ。JscriptによるExcel操作は調べると結構情報が出てくるので、これもアリかもしれない。ActiveXObjectというものに理解がないので詳しい所は分らないが、恐らくスクリプトが起動した時点で使用されるアセンブリが決定されるのだろうし、互換性なども気にする必要が無いだろう。

というわけで、既存Excel操作は非常に疲れるのである。できればこんな仕事請け負わない方がいいんじゃないかと思っている。もしどうしても作る必要に迫られたのなら、さっさとVBAで作成するのが安牌だろう。

これから就活・転職する人にIT業界のエンジニア職をオススメする理由

 寒くなってきましたね(11/9現在)。僕はもともと自然が好きで、わざわざ農学部の森林科学科なんてものを卒業していたりもするんですが、今は紅葉まっさかり、素晴らし季節です。この間、ツーリング&登山で堪能してきましたけど、赤や黄色に染まる山並を眺めるってのは良いものですねえ。いつも室内にいると特に・・・自然が恋しくなる。そう、僕がいるIT業界は、ご存知の通りTHEインドアな業界なもので・・・。最初から少々ディスり気味で、お前何してん?とか言われそうですが、これでも僕はこの業界を結構気に入っているんです。というわけで、ここからはIT業界の良さについてつづっていきたいと思います。

とりあえずIT業界、という選択はアリ

 どこへ就職しよう、転職しよう。大してやりたいことが無い。そんな方にはIT業界、特にエンジニア職をオススメしておきます。オススメする理由は至極単純で、「ITがあらゆることに使われているから」です。細かいところは割愛しますが、今の世の中はITが中心に回ってます。あらゆる仕事の道具、基盤としてITが使われていることは、今更言うまでもありません。自動車のエンジンはコンピューター制御で動いています。買い物のAmazonはインターネット上のWebサービスです。会社の受発注業務は業務アプリケーション無しに回りません。全てにITが使われています。今後もさらにその傾向は高まるでしょう。

特に最近はAIやらBotやらRPAやら叫ばれていますよね。そしてそいつらに人間の仕事が奪われると・・・。うーん実は言うほど先には進んでいないと感じますけどね。IT業界ってのは結構泥臭い仕事で、アナログチックな部分も多いんです。でもジワジワと・・・確実に人間の仕事を奪っていくのは確かだと思います。

それに、やっぱりITのエンジニアやるって楽しいですよ。色々な知識・技術を学んで、それを使って問題を解決する、モノを作る。単純に楽しいと思います。人によってはそのまま趣味になるんじゃないでしょうか。それに、一年も働けば自分でサービスとか作れるようになりますからね。仕事を楽にするツールなんかを作ったりできるようにもなります。

エンジニアの敷居は高くない

 さて、とりあえずここらへんでテンションを爆下げしておきしょう。今からこの世界に入って、純粋な技術者として上を目指すのはかなり無謀です。頭の良さが仕事に直結する部分も多々あるので、才能のある人は本当にすごいなあと感じますし・・・子供のころからプログラミングをしているような変態も時折見かけます。これは皆さんも20年以上生きてきて既にお気付きのところかと思いますが・・・良い環境で育った才人にはどうやったって勝てないんですよね。純粋な技術者として成功するのは諦めた方がよさそうです。

まあでも、世の中そういう天才みたいな人ばかりではありません。まずは平均的なエンジニアを目指せばいいんだと思います。多少の才能と努力は必要ですが、平均的なエンジニアを目指すことは誰でも可能だと感じています。就職すると実感するのですが、日本の社会人は恐ろしく自習をしません。ちょっと努力すれば平均には届いちゃいます。例えばプログラミングには難しさもありますが、ちゃんと文章を読める人であれば、よほど複雑なものでもない限り、実用レベルで理解・実装が出来ないことは殆どありません。これはプログラミングに限らず、インフラ技術などにおいても同様です。

 さらに、日本では未経験でも簡単にエンジニアとして就職することができます。今や途轍もなく大切な要素であるITですが、それをメインで扱う業界は、相変わらず日本の大学生から好まれません。ブラックという印象があるようです。ええと・・・否定はしません。しかしこれは同時にお買い得でもあります。お給料を貰いながら、非常に重要なスキルの勉強ができる施設か何かに、簡単に入れるということです。さながらブラック研究室の院生と言ったところでしょうか。

これからの時代、最初に入った会社で40年働き続けるということはまずないと思います。現実として可能性が低いんじゃないかと思うのです。じゃあ他の会社に行ったときに何が必要かというと、やっぱりスキルだと思います。実務能力というべきかな。IT業界で何年か働いた経験を活かしながら、別の業界で別の職種をやったり、副業をやったりすることは、想像つきやすいんじゃないでしょうか?

繰り返しになりますが、特別優秀なエンジニアになる必要はないんだと思ってます。世の中のお金やモノの流れが、ITを通じてどう動いているのか。色んなサービスとかシステムがどこでどう動いているのか、それぞれにどんな特徴があるのか。頭の中に、IT技術の活用マップみたいなものができる、ということが重要だと思うのです。そしてそこへ足を踏み入れるのに、敷居がだいぶ低いということをお伝えしたかったわけです。

今はスキルを組み合わせる時代

 まず最初に断っておくと、なんでみんな働くんでしょうか。お金が欲しいからですよね。ある程度お金を手に入れちゃった人は、手段が目的になりがちなんでしょうけど。ホリ〇モンとかホリ〇モンとかホリ〇モンとか。彼は「やりたいことをやれ!」とよく言ってますが、僕ら凡人からすれば「金が手に入る保証がなきゃやらねえよ!」ですよね。当たり前の感覚だと思います。

その普通の感覚からもっと言うと、より「短い時間で」、「低ストレスで」、「多くの」お金が欲しいわけですよね。つまり、お金を得る効率を上げる必要があるということ。じゃあお金を得る効率を上げるにはどうしたらいいだろうか?お金に直結する仕事をするのが手っ取り早いというわけです。物凄くざっくりとした話になりましたが、金融業界って給料が高いですよね。それは仕事がお金に直結しているからです。仕事がお金に直結していて、時間あたりに生まれるお金の量が多いから、社員の給料も上がるわけです。さて、そんな金融業界からのニュースを一つ。

gigazine.net

ゴールドマンサックスって知ってますか?世界屈指の投資銀行です。この記事が示しているのは、そのトレーダー(株取引をする人)がどんどんAI(or統計計算ツール)に置き換わっているというお話です。僕が言いたいのは、AIに人間の仕事が取って代わられるということではなく(いずれそうなるかもしれませんが)、こう言う感じで世の中の仕事はIT色が強まってくるということです。ここでいうと、金融っていう業務の専門知識×IT技術ってことですね。

それがこの章で言いたかった、今が「スキルを組み合わせる時代」であるということです。組み合わせるスキルの一つとして、ITスキルはいかがでしょうか、ということです。特別専門性が高いわけでもない限り、プログラミンができるだけでも、業務の知識があるだけでも、なかなか給料は上がりません。何故か?プログラミングができるだけじゃ使えないし、業務が分かってもITに疎い人は、お金を生み出すスピードが遅いからです。モノやサービスを売ったり買ったりする、業務というお金に直結する部分をITによって効率化することで、お金を効率的に得られるようになるんです。そしてそれが世の中の様々な業界で求められていて、故に会社員として高い給料をもらえるようになるということです。

まあ、ITから入るか業務から入るか、どっちがいいかですけど、ITスキル・・・というか全容を見れる力は、有るのと無いのじゃ生きていくうえで明確な差が生まれる部分だと思います。個人的に、ITスキルは若い方が取得しやすいと思っていますし、事務作業も効率化できるようになるので、できるだけ早いうちに経験しておくのがお得かなと思っています。

なお、ここではITスキル×何かって感じで限定してますけど、2つ以上の親和性の高いスキルを身に着けている人材というのは、1つのスキルしかない人よりも単純に希少性が高いので、(需要があるのであれば)それだけ貰えるお金は増えることになりますね。

そんな感じでIT業界を爆上げしておきます。

余談。独立もしやすい

 余談ですけど、IT全般について知っておくと、たとえば個人でサービスを運営してみたいとか、会社を立ち上げてみたいとかって時に、どこで何を使えばいいのかわかるんですよね。だから独立に有利だと思います。フリーランス的な働き方も、IT職に多いですよね。まあ大企業に入って最後まで勤め上げるのが楽か、何とか個人で生計を立てていくか、どっちが楽で効率がいいか分かりませんけどね。会社にすがるってのは(潰れなければ)割と楽だと思いますし、退職金も(今は)多いですから。僕はぬるい大企業 + 副業って戦略目指してますけどね。めっちゃ余談でした。

SDKを使ってPHPでDropBoxのAPIを扱う

 個人で作っていたWebアプリを久々に見ていたら、ファイル関連でうまく動作していないことに気が付き、調べてみると、どうやらDropBoxAPIがバージョンアップした影響のようでした。というわけで今まで使っていたSDKは使えないようです。

旧バージョン対応のSDKというのはこれです。

github.com

新バージョン対応のSDKはこちら。サムネイルが僕並のイケメンですね。

github.com

どちらも有志ですね。すごいなあ。

とまあそういうわけで、新しいSDKを用いたラッパークラスを作ってみました。

<?php
//このプログラムは kunalvarma05/dropbox-php-sdk を用いて、
//PHPでDropBoxを扱うためのラッパークラスです。
//参考:https://github.com/kunalvarma05/dropbox-php-sdk
use Kunnu\Dropbox\Dropbox;
use Kunnu\Dropbox\DropboxApp;
use Kunnu\Dropbox\DropboxFile;
use Kunnu\Dropbox\Exception;
class OperateDropbox{
    private $accessToken = 'your-DropBox-APPs-AccessToken';
    private $key = 'your-DropBox-APPKey';
    Private $secret = 'your-DropBox-APPsecret';
    private $dropbox;  
 
    //DropBoxに接続するクライアント作成
    public function MakeClient(){
        $app = new DropboxApp($this->key,
            $this->secret, $this->accessToken);
        $this->dropbox = new Dropbox($app);
    }
    
    //DropBoxにファイル保存
    public function UploadToDropBox($filePathOnDropBox, $filePathOnLocal){
        try{
            $dropboxFile = new DropboxFile($filePathOnLocal);
            $file = $this->dropbox->upload($dropboxFile,
                $filePathOnDropBox, ['autorename' => true]);
            return true;
        }catch(DropboxClientException $ex){
            return false;
        }
    }
    
    //Dropboxからファイルをダウンロード
    public function DownLoadToLocal($filePathOnDropBox, $filePathOnLocal){
        try{
            $file = $this->dropbox->download($filePathOnDropBox);
            $content = $file->getContents();
            file_put_contents($filePathOnLocal, $content);
            $metadata = $file->getMetadata();
            $metadata->getName();
            return true;
        }catch(DropboxClientException $ex){
            return false;
        }
    }
    
    //Dropboxからファイル削除
    public function DeleteFromDropBox($filePathOnDropBox){
        try{
            $res = $this->dropbox->delete($filePathOnDropBox);
            return true;
        }catch(DropboxClientException $ex){
            return false;
        }
    }
}


$operateDropBox = new OperateDropbox();
$operateDropBox->MakeClient();
$operateDropBox->anyFunction();

?>

アップロード、ダウンロード、削除っていう基本機能ですが、よかったらぜひ使ってみてください。何か間違っていたらご指摘いただけると嬉しいです。

Gistはこちら→DropBoxWrapper.php · GitHub