平成最後のみんなのPython勉強会で得た知見 〜 正規表現/機械学習/Pyramid/環境構築/Falcon/そして 〜

はじめに

先日開催された、みんなのPython勉強会で得られた知見についてまとめます。

startpython.connpass.com

毎月開催されている、この「みんなのPython勉強会」。

2019年4月開催の今回は平成最後ということもあり、司会進行と計6人の登壇者全員が平成生まれ縛りとなっていました。

本ブログ記事は全体としては少し長文なので、概要だけをさっと知りたい方は1.1〜1.6までを参照ください。

その後2.1から各登壇内容の詳細レポートが改めて続きます。

1. 各登壇内容からの知見抜粋

1.1. 正規表現

  • Pythonの正規表現における\wがマッチするのは、[a-zA-Z0-9_](半角英数字とアンダースコア)だけではない

  • それ以外にも、かな漢字、ヘブライ文字、アラビア文字などの非常に多くの(20,000種以上の)Unicode文字にマッチする

1.2. 機械学習

  • 機械学習におけるデータクレンジングでは、実際の状況(今回であればタイタニック号沈没)を想像しながら特徴量として活用できるものを探す

1.3. Pyramid

  • 過去に自身で開発したDjango製アプリを、情報の少ないPyramidで作ることに挑戦

  • 苦戦はしたが、Djangoの良さ、Pyramidの良さ、それぞれ発見があった

1.4. 環境構築

  • 初学者は、Pythonやパッケージのインストール方法をどれか1つだけにするのがおすすめ
    • Pythonのインストール
      • python.orgからのインストールとAnaconda利用の両方などは避ける
    • パッケージのインストール
      • Anaconda利用者であれば、pip installconda installに読み替える
  • 次のステップとして仮想環境を利用すると良い

1.5. Falcon

  • 同じ軽量フレームワークであるFlaskと比較して10倍以上高速

  • RESTfulな機能を持ち、バックエンドAPI開発に適している

1.6. 持っていないものを見つける話

  • Pythonを含めたオープンソースと、それにまつわるコミュニティは持っていない者の味方

  • 自分の持っていない物が分かれば、自分がどこで活躍すべきかが分かる

目次

2.各登壇内容の詳細レポート

2.1. Pythonにおける正規表現の話 \wとUnicodeの意外な関係

\wは、半角英数字とアンダースコア以外の多くのUnicode文字ともマッチする

  • Pythonの正規表現における\wはany word characterと呼ばれる

  • \wは、[a-zA-Z0-9_](半角英数字とアンダースコア)と同義と説明されている場合があるが、それ以外の非常に多くのUnicode文字にもマッチする

    • 例えば、日本語のかな漢字にもマッチする

    • Python3の公式ドキュメントによれば「unicodedataモジュールで提供されているUnicode データベースでlettersとしてマークされている全ての文字とマッチする」とある

Unicodeにおいては各文字はLetter, Numberなどにカテゴリ分けされている

  • カテゴリはLetter, Number, Punctuationなど
  • それぞれLx, Nx, Pxと表現される

    • Lettersもさらに以下に分類される

      • Lu(Uppercase:大文字)
      • Ll(Lowercase:小文字)
      • Lo(Other:その他)
    • このLoに分類されるのが、かな漢字、ヘブライ文字、アラビア文字などであり、非常に文字数が多い

    • Numberも以下に分けられる

      • Nd(Decimal Digit:10進数)
      • Nl(Letter:ローマ数字などの数を表す文字)
      • No(Other:分数などのその他の文字)

\wは全てのLetter, Numberにマッチするわけではなく、一部例外がある

  • \wは20,000種以上の文字にマッチするが全てのLetter, Numberにマッチするわけではなく一部例外がある

漢字だけマッチさせたい場合は、Unicode文字ブロパティを使うと良い

  • 漢字プラス「々」といった記号だけをマッチさせたい場合は、regexモジュールで漢字のUnicodeエイリアスp{Han}を指定すると良い
>>>import regex
>>>regex.findall(r'p{Han}', '堂々')
['堂', '々']

2.2. Pythonと挑んだtitanic 〜 101回目のsubmit 〜

Kaggleは予測モデリングおよび分析手法関連プラットホーム

  • 企業等がデータを投稿し、世界中の統計家やデータ分析家がその最適モデルを競い合う場

titanicはKaggle内のコンペ

  • 沈没したタイタニック号からの生存者を予測する課題

機械学習モデルの作成では最初にデータのクレンジングを行う

  • 欠損値補完
  • 特徴量作成
  • 不使用の特徴量の削除

データのクレンジングにあたっては、実際の状況(タイタニック号の沈没)を想像しながら特徴量として活用できるものを探す

  • 欠損値の補完の一例

    • 年齢の場合

      • Miss, Mrs, Mrなどの敬称ごとの平均年齢を算出し補完
  • 特徴量の作成の一例

    • まず家族の人数を算出し、そこから更に脱出船に乗れる確率を仮定

      • 父、母、幼い子2人であれば、子どもから優先して脱出船に乗れると想定

今回の予測モデル作成の詳細記事

2.3. DjangoとPyramidで同じアプリを作った話

既存のDjango製アプリを、情報の少ないPyramidで作ることに挑戦した

  • 過去に自身で開発したDjango製アプリを、他のフレームワークで開発するとどうなるのか疑問に思った

  • 他のフレームワークには、資料の少ないPyramidを選定

Pyramidによる開発で苦戦した点

  • フルスタックフレームワークであるDjangoと比較すると、Pyramidでは他のパッケージを利用する必要があり、それらの学習コストを要する

    • 今回は以下パッケージを使用した
      • ORMにOrator
      • テストにPytest
  • Djangoは比較的「こうあるべき」という指針が明示されているが、Pyramidにはそうしたものが無いので実装時に判断に迷うことがあった

Pyramidで好きな点

  • add_request_method
    • リクエストオブジェクトにメソッドまたはプロパティを加える
  • 簡易な計算結果をモジュールひとつでWebブラウザに表示できる
  • 疎結合なアプリケーションを作りやすい
  • viewのテスト実行が早い

Django以外のフレームワークでWeb開発する場合のアドバイス

  • 「Djangoでは◯◯ができるのに」という考えは捨てた方が良い

    • 比較するにはDjangoは用意された機能があまりにも手厚すぎる
  • Django経験者にとっては「車輪の再発明」に思えるような開発をすることもあるかもしれないが、それ自体も楽しもう

2.4. P(ython)&I 最初の落とし穴を避け、成功体験を積むために

自身のPython成功体験を支えたのは環境構築

  • 最初に手に取った本は「退屈なことはPythonにやらせよう」

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

退屈なことはPythonにやらせよう ―ノンプログラマーにもできる自動化処理プログラミング

  • 最初の環境構築が上手くいったので、Pythonでの成功体験を積むことができた

Pythonを始めた直後の人は環境構築でつまずきやすい

  • その後、自身がPythonを初学者に教えるようになって、環境構築でつまずく人が多いことに気付いた

  • よく見られるのが、Pythonを重複してインストールしているケース

    • python.orgからのインストールとAnaconda利用の両方など

Pythonのインストール方法はどれか1つだけにしよう

  • 各種チュートリアルの記載の通りに進める姿勢は素晴らしいが、Pythonのインストール方法が自分とは異なる場合は、その部分を読み替えよう

パッケージのインストールはpip installconda installのどちらかに統一しよう

  • 例えば、python.orgからPythonをインストール済みであるところ、Anacondaを利用した機械学習の解説記事を実践してみたくなったら?

    • この場合、Anacondaを導入することはおすすめしない
    • Anacondaに最初から入っているパッケージ(numpy, scikit-learnなど)は、個別にpip installしよう
  • 逆に、AnacondaでPythonをインストール済みであるところ、python.orgからPythonをダウンロードして環境構築している記事を実践する場合は?

    • 記事中でパッケージをpip installしている箇所は、conda installに読み替えよう

次のステップとして仮想環境を利用しよう

  • venvなどを使う
    • 詳細はPyNyumonテキストを参照
  • Anacondaであれば、conda create, conda activateで環境を作成・切替できる
    • 詳細はpython.jpのCondaコマンドを参照

2.5. FlaskとDjango以外のAPI開発の選択肢

PythonのWebアプリケーションフレームワークの二大巨頭といえばFlaskとDjango

  • Flask
    • 軽量、学習コスト低
  • Django
    • フルスタック、学習コスト高

Flaskの機能は最低限に絞られ、パフォーマンスもさほど良くない

  • 一定の機能を作るには、サードパーティのライブラリをある程度把握する必要あり

  • 他のフレームワークと比べ、パフォーマンスはそれほど良くない

DjangoはバックエンドAPI開発には不要な機能も多い

  • フルスタック故に他のサードパーティライブラリを入れなくても一通りの開発ができるが、学習コストもそこそこあり、ちょっとしたものを開発するのには不向き

  • バックエンドAPI開発には不要な機能も多い

Falconはパフォーマンスの良いAPIを開発するのに適している

  • 最近はフロントエンドのSPA化が進み、フロントとバックエンド分離のニーズは高い

  • FalconはFlaskの10倍以上の速度

  • FalconのResourceという機能(MVCのCに相当)はRESTfulであり、API開発に適している

Falconの課題はサードパーティの少なさと、しっかりとした設計が求められること

  • 同じ軽量フレームワークであるFlaskよりもサードパーティライブラリが少ない

  • Flask同様、構成はしっかりと設計する必要がある

    • DDD(ドメイン駆動設計)のオニオンアーキテクチャ、クリーンアーキテクチャで設計すると良いかもしれない

今後のFalconはASGI対応予定

  • 今後リリース予定の3.0ではASGI対応予定

2.6. 無題(持っていないものを見つける話)

Python, Linux, 初のWebブラウザも平成初期の生まれ

  • Pythonは1991〜1992年生まれ(平成3〜4年)

  • Linuxは1991年生まれ(平成3年)

  • 初のWebブラウザ(NCSA Mosaic)は1993年生まれ(平成5年)

平成時代にPythonでWebアプリを作り続けてきた

  • 学生時代にPythonに出会い、様々なWebアプリケーションを作ってきた

  • 就職後も受託開発や自社サービス開発でWebアプリケーションを作る

  • 自分のスキル(Webアプリ開発経験)と会社の強み(Pythonに特化)を活かし、新規ビジネスとなる自社サービスのWebアプリを作ることができた

Pythonプロフェッショナルプログラミング第3版

Pythonプロフェッショナルプログラミング第3版

持っていない者にとって大切なのは自分らしい物を作ること、オープンソースはそんな持っていない者の味方

  • 大企業のような原資を持たない場合、自社サービスの運営(マーケティングやその他)では制約があるが、そんな中で大切なのは自分たちらしい物を作ること

  • Pythonを含めたオープンソースと、それにまつわるコミュニティは持っていない者の味方であった

  • 自分の持っていない物が分かれば、自分がどこで活躍すべきかが分かる

失われた時代という平成を生きたからこそ、次の令和に作れるものがある

  • 平成には失われた20年(10年とも30年とも)があるといわれ、これを耳にすると平成で生まれ育った自分は消沈してしまう

  • しかし、失われた時代に生きたからこそ、次の令和に作れるものがある

3. 最後に

勉強会終了後の私のツイートより。

本当に素晴らしい勉強会でした。

主催のStart Python Clubの方々、会場提供のリーディングエッジ社さん、登壇者の方々、また懇親会でお話しさせていただいた方々、ありがとうございました!

WEBエンジニアへ転職したい人のための勉強会「転職LT#4 〜春の転職まつり〜」に参加してきました

はじめに

WEBエンジニアへ転職したい人のための勉強会「転職LT#4 〜春の転職まつり〜」に参加してきたので、そのレポートです。

目次

参加のきっかけ

2019年2月1日(金)に参加したWebエンジニア勉強会#11にも登壇*1されていたVTRyo(@3s_hv)さんが、転職関連の勉強会を過去何度か主催されており、2月の中ごろにconnpass上で新たな勉強会が開催されることが告知された為、早速申し込みました。

申し込み当時、私は転職活動の真っ只中で翌日には最終面接を控えているような緊張した状況でした。

転職活動が上手くいかなかった時に備え、新たな企業との出会いのチャンスもありそうなこの約一月半後の勉強会に申し込んだわけなのですが、結果的には内定を獲得*2し転職活動を終了させた状態で参加することになりました。

とは言え、勉強会では新たな気付きがあったほか、懇親会では私の方から転職活動の経験を他の参加者の方々にお話しすることなどもできましたので、参加して良かったと思います。

会場およびスポンサー企業

会場は、渋谷にある株式会社サポーターズさんの東京オフィスでした。

また、この勉強会は以下の各社さんがスポンサーとなっており、飲食有りでありながら参加費無料というありがたい勉強会となっていました。

登壇内容メモ

未経験だからこそSNS転職

リョッキー(@ryokky59)さん

  • 4ヶ月の転職活動について
  • 0ヶ月目
    • 仕事を辞め、新潟から渋谷のシェアハウスへ
    • プログラミングスクールへ
    • twitterアカウント作成
  • 1ヶ月目
    • 1日8〜10時間必死に勉強。周りから「怖い」と言われるほど。
    • twitterで勉強した内容を毎日ツイート
  • 2ヶ月目
    • オリジナルアプリを作成。楽しい。
    • 週1回Qiitaへの記事投稿にチャレンジ
      • 初学者だからこそ初学者にわかりやすい記事を書ける
    • もくもく会、勉強会に参加
      • スクールは未経験しかいないが、実際に働いているエンジニアの話が聞けた
      • 一方で未経験者もいるから参加しやすい
      • 採用に関する話も転がっているので、懇親会に参加しよう
  • 3ヶ月目
    • 最初はエージェント経由で企業との面接を申し込む
    • 計20回面接し、業界知識が付いたほか、面接慣れした
  • 4ヶ月目
    • Wantedlyで、少しでも技術に興味のある企業に対しては「話を聞きに行く」ボタンを連打
    • 実際に面談できる確率は5割いかないぐらい
  • やって良かったことのまとめ
    • twitterを使ってアウトプットを見せつける
      • Qiitaに投稿したら、勉強会に参加したら、勉強したら、とにかくつぶやく
    • WantedlyにtwitterやGitHubアカウントを連携し、アウトプットを企業に見てもらう為の手間を極力減らす
    • 見てもらえなかったら、アウトプットしていないのと同じ

Qiitaでの転職活動記も話題となったリョッキー(@ryokky59)さんの登壇。

その勉強時間や面接回数は誰もが真似できるものではないかもしれませんが、Wantedlyも含めSNSを活用したアウトプットの積極的アピール方法は大変参考になります。

SNS転職での失敗

おかしん(@okash1n)さん

スライド撮影禁止のややセンシティブな内容でしたので、メモは取らず登壇内容を集中して聴くことにしました。

一言でいうと「転職に際して不義理はNG」ということであり、自分自身も気を付けたいところです。

この「失敗談」、途中までそのストーリーにハラハラしましたが、最終的には登場人物の仲は円満な結果へと落ち着き、ホッとしました。まさに雨降って地固まる、といったお話でした。

面接をイージーモードにするコツ

のみぞん(@nomizooone)さん

  • 「自分のトークに自信ありますか?」
  • 転職歴6回の中で初めての転職活動(半年間)では数十社から不採用となり心が折れ、一度は諦めた
  • しかし、その後、年齢は重ねたものの転職の回数を重ねるごとに慣れていき、今では数社から内定を獲得し、自分が選択できる立場に
  • 職務経歴書を万全にし、職務経歴書に喋らせてしまう
    • よくあるテンプレートを使わず、自分という商品を売り込める内容に
  • よくある質問に対する回答を文字に起こして準備する
    • 自分で納得できる回答であることが大切で、暗記は駄目
  • 最初の自己紹介だけで良いので声に出して録画して練習する
    • 面接の始まりは高確率で自己紹介。最初に良い雰囲気を作れると後が楽。

私も喋りに自信は無いので、よくある質問に対する回答はある程度事前に用意しましたが、ここまでの事前準備はできていませんでした。

でも、この登壇内容の通り、準備すればするほど自信が付いて堂々と受け答えができるんですよね。

また、職務経歴書をここまで整備して採用担当の興味を惹き、これに関する質疑応答の場にしてしまうというのは、面接を応募者側がコントロールしてしまっていますね。凄い。

失敗と改善で進めた転職活動

Tomoki(@tofu511)さん

  • 9ヶ月に渡る失敗と改善の転職活動記
  • 失敗1
    • 書類選考、一次面接は通過するが、その先が続かず
    • 志望理由、モチベーションは認めてもらえるものの最後の一押しが足りなかった
  • 失敗1への改善
    • エンジニアのキャリア関連の勉強会に参加し、有識者に相談
    • ポートフォリオ作成を勧められ、挑戦することに
  • 失敗2
    • Ruby on Railsでポートフォリオ作成を進める
    • しかし、慣れない言語(動的型付け)であることや、わからないことを聞ける知見のある人が周囲にいないことから、エラーにはまり込む
    • モチベーションは地の底へ
  • 失敗2への改善
    • オンラインのプログラミングスクールを使い、わからないことをいつでも聞けるように
    • 経験のあるJavaと同じJVM言語であるScalaを選択
    • モチベーション低下を防ぎ、挫折することなく、ポートフォリオを作成
  • 転職成功
    • ポートフォリオ作成を終えた月から活動再開
    • ポートフォリオの力は絶大で、翌月には第一志望の企業から内定獲得

私は幸いポートフォリオを作成した上で転職活動に臨むことができましたが、それも転職成功事例の情報収集があったからこそ。一人の力は弱くても、情報や有識者、環境といった周囲の力を得ることの大切さを再認識しました。

そして、最終ページの「伝えたいこと」は必見。

最後に

勉強会後の懇親会では、美味しい料理やお酒とともに、登壇者や以下の参加者の方々を中心に楽しく交流することができました。

  • 普段、当ブログをよく見ていただいているいわしまん(@iwasiman) さん

  • Webエンジニア勉強会#11で登壇もされていたみずりゅ(@MzRyuKa)さん

  • SIerからWeb系に転職され、過去にこの転職LTに登壇もされたねっしー(@yuuri_oo00)さん

  • Podcast「成し遂げたいam」をやっている、なべくら(@nabe__kurage)さん、KANE(@higuyume)さん

  • 最近、しがないラジオに出演もされた、なおと(@naoto_7713)さん

主催者のVTRyo(@3s_hv)さん、はっせー(@Dear_you_cry)さん、設営に携わられた方々、登壇者の方々、スポンサー企業の各社さん、ありがとうございました!

*1:Webエンジニア勉強会#11の参加レポート

*2:実務未経験からのWebエンジニア転職活動の記録

50代の銀行員がプログラミング(Python)を始めた話

はじめに

先日、Pythonを始めた50歳銀行員の方についてツイートしたところ、多くの方からの反響がありました。

今回はこの銀行員の方について、少しだけ触れたいと思います。

目次

エピソード

この銀行員の方とは5, 6年前から仕事でのお付き合いがあります。

私は以前からこの方を尊敬していて、

  • 40歳を超えてから初めて社内のIT関連部署へ。配属当初、周囲や発注先のシステムエンジニアが話すシステム開発関連の用語が理解できなかった為、キャッチアップの為に情報処理技術者試験の高度資格であるプロジェクトマネージャを勉強して早々に取得。

  • 私が出会った当時40代半ばでしたが、若手顔負けのエネルギッシュさで、どんな未経験システムのプロジェクトに対してもその都度勉強しながら前向きに取り組む。

といった感じで、自分もこうありたいと思っていました。

私の転職活動を打ち明けたら

その後、私はPythonを学んだことをきっかけに約2ヶ月強に渡るWebエンジニア転職活動を行ったのですが、なんとか内定が出始めて活動終了が見えてきたころ、普段お世話になっているこの銀行員の方に転職活動の話を打ち明けたところ、なんとこの方も冒頭のツイートの通り3ヶ月前からPythonの学習を始めていたのでした。

非常に驚きましたし、お互いがPythonやっていることがわかると、そこからはPythonの話題で大盛り上がりになりました。

Djangoに関しては私の方が先行していましたが、Anaconda, JupyterNotebook, NumPy, Pandasあたりの話は私は頷くことしかできませんでした。

twitterや勉強会などを除けば、リアルな生活の中では私はPythonの勉強をある種孤独に続けてきた為、こんな身近に仲間がいるのであれば早く知りたかったー、と思いました。

ちなみにその方、AI・機械学習のオンライン学習コースを社内で受講できるようになり志望したところ、人気が高く若手が優先されて受講できなかった為、個人で申し込んで最速で修了させたそうです。凄い。

今後について

私が転職することによって、その方と仕事上の繋がりは無くなってしまうのですが、今後も連絡を取ってPythonの勉強会などに一緒に参加していきたいと思います。

その方は、Pythonスタートブックという辻 真吾さんの著書からPythonの勉強を始めたそうなので、辻さんが登壇されることもある勉強会にお誘いできたらと思います。

最後に

プログラミングを学んで*1Webエンジニアにキャリアチェンジ*2するという今回の私の決断について、この方はエールを送ってくださいました。

この方も、このまま機械学習を中心にPythonを学び続けたら、データサイエンス方面に転向してもおかしくないのではないかと私は思っています。

「少なくとも70歳までは働くだろうし人生100年なのだから、いつまでも学びを続けよう!」という志を共有して、今後も切磋琢磨していきたいと思います。

Pythonスタートブック[増補改訂版]

Pythonスタートブック[増補改訂版]

*1:働きながらプログラミングをゼロから学んで半年でWebサービスを作るまでの記録

*2:実務未経験からのWebエンジニア転職活動の記録

ITエンジニアは電子印鑑の夢を見るか?

はじめに

法人設立時の印鑑届出義務について、話題になっています。

https://www.tv-tokyo.co.jp/mv/nms/smp/news/post_172988https://www.tv-tokyo.co.jp/mv/nms/smp/news/post_172988

その是非はさておき、印鑑が必要であることが想起される銀行であっても、(ネット専業銀行でなくとも)口座開設に印鑑が不要であることは既に珍しくはありません。

印鑑レス口座について | 三菱UFJ銀行

口座開設時に印鑑が不要、開設後も印鑑なしでお取引可能です。

「無印鑑口座利用のお客さま向け特約」および「窓口でキャッシュカード認証により取引を行うお客さま向け特約」の制定│りそな銀行

本特約は当社で預金口座の取引印鑑の届出なく各種取引を行うお客さまとの取引に適用されます。

店頭での口座開設のお手続き | 新生銀行

印鑑をお届けいただく場合は印鑑をご持参ください。

新生銀行ではご印鑑のほか、お客さまのサイン(署名)をお届けいただくことができます。

アナログなイメージの強い銀行ですら印鑑レスが進んでいるわけですが、印鑑文化から最も縁遠いであろう(?)ITエンジニアの職場での印鑑事情はどうなっているのか、twitter上でアンケートを取ってみました。

目次

アンケート方法

以下のツイートで2日間集計しました。

  • 総務・人事が絡むような庶務手続きを除外するために対象を「開発・保守運用に直接関わる手続き」に限定する注意書きをしました。

  • SIerとWeb系企業で違いが出るかも興味があったので、その点も質問に加えました。なお、SIer、Web系企業の定義は特に示していません。投票いただいた方の自身の職場(常駐先)に対する判断に委ねています。

集計結果

257票もの回答をいただきました。ご協力ありがとうございました。

上記のツイートの投票結果表示だけではわかりづらいので、整理したのが以下になります。

ITエンジニア全体

必要、不要でおおよそ半々に割れました。

思ったよりも必要な割合が高いんだな、という印象を私は持ちましたが、いかがでしょうか?

f:id:shonansurvivors:20190315051913p:plain

SIerおよびWeb系企業

面白かったのが、企業タイプ別の結果です。

f:id:shonansurvivors:20190315052047p:plain

f:id:shonansurvivors:20190315052106p:plain

SIerは70%で必要となり、逆にWeb系企業で必要なのは28%に留まる、と大きな違いが出ました。

どんな手続きで印鑑が必要か

これに関しては回答が得られなかったのですが、経済産業省が作成している「システム管理基準 追補版(財務報告に係るIT統制ガイダンス)」を見ると、最後の方に

システムの変更および保守管理については、変更管理手続に従っている(標準化され、記録され、承認され、文書化されている)

という承認プロセス基準の一例に対し、

25件のうち1件、承認漏れがあったが、責任者の押印漏れであり、実際には、承認されているとの説明を受けた。25件の追加テストの結果、押印漏れはなく、単なる押印漏れのミスであると判断した

といった、文書化と押印を前提とした評価結果の事例がありました。

こういった場面で、印鑑が使われているのだと思われます。

最後に

ということで、ITエンジニアの職場といえど印鑑は根強く生き残っているようです。

開発や保守で「承認」という行為が欠かせない場面はあるかと思うので、そこがうまく印鑑レス、ペーパーレスの仕組みになれば良いですね。

アンドロイドは電気羊の夢を見るか?

アンドロイドは電気羊の夢を見るか?

ブレードランナー 2049(初回生産限定) [Blu-ray]

ブレードランナー 2049(初回生産限定) [Blu-ray]

プログラミングを学び、Web系エンジニアへの転職が決まるまで

はじめに

今年2019年1月からWeb系エンジニアへの転職活動を行っていましたが、このたびWeb系の自社開発企業(自社のWebサービス等を外注せず社員で内製開発・運営している企業)から内定をいただき、入社を決めました。

目次

転職の動機とその活動記録

2018年5月〜11月:転職をまだ考えていなかった時期

現職は非IT系企業にてプログラミングを一切行わない仕事をしているのですが、担当するWebサービスや社内システムの改善が様々な事情・制約で思うようには進まない中、現状を少しでも変える為、また自己研鑽の目的で、昨年2018年5月から独学でプログラミング(Python)の勉強を開始しました。

そして半年後の2018年11月、個人開発でWebサービスを完成させたことを機にそれまでのプログラミング勉強法をブログにまとめ、初めて作ったtwitterアカウントで告知をしたところ、はてなブックマークのホットエントリー入りするなどしました。

プログラミングでのモノ作りそのものに加えて、その成果や学びをブログやtwitterで発信することの楽しさに目覚めた私は、GitHubやQiitaのアカウントも取得し、アウトプットを継続していきました。

また、connpassに登録されている勉強会やもくもく会にも参加し、Web系エンジニアの方々との交流も開始しました。

2018年12月:転職を意識し出した時期

こうした活動を通じて、趣味や自己啓発ではなく本業としてWeb系エンジニアの世界に飛び込んでいきたいという思いが高まり、12月中旬ごろから転職の為の情報収集を開始しました。

なお、決して若くは無い年齢で家族を抱えながら実務未経験の職に転向するわけですので、上記の「好きが高じて」といった動機だけではなく、他にも現職への様々な思いや自身の将来への考えもある中での転職なのですが、それらも書くとあまりに長くなるので、ここでは割愛します。

2019年1月:転職活動開始

Wantedlyにプロフィールとポートフォリオを掲載の上、1月中旬からWeb系の自社開発企業に絞って面談を申し込みました(企業側から面談のお誘いを受けることもありました)。

また、twitter上でも転職活動開始を宣言。これがきっかけで面談に繋がった企業も僅かながらありました。

1月下旬には実際に企業との面談を開始しました。

2019年2月:各社との面談〜選考面接〜内定

2月は各社との面談、選考面接を順次行いました。

中には技術面接を行う企業もありました(技術面接と銘打っていなくても、技術的な理解度を確認する質問が出る面接もありました)。

最終面接を経て、2月の下旬ごろから内定が出始めました。

2019年3月:オファー面談〜退職に向けた社内調整〜入社承諾

内定を通知いただいた企業とは再度面談(オファー面談)を行いました。

処遇に関しては内定通知書に記載されているので、実務未経験であった私の場合はそこはあまり話題にはせず、内定通知書には書かれていない、Web系エンジニアとしてスキルを伸ばせそうな環境であるかどうかを重視して改めて確認しました。

  • 当面はコードを書くことに専念させてもらえるか(現職でプロジェクトマネジメント経験があることから、その方面の仕事に最初からアサインされたりするようなことがないか)

  • コードレビュー、テスト、CI/CD、Docker活用の取り組み状況

それまでの面談や面接でも同種の質問はしてきたのですが、採否がかかっている面接の場よりも、内定を貰った後のオファー面談の場の方がやはり遠慮なく質問しやすいので、そこで自分が気になる点は納得行くまで確認させてもらいました。

面談後は、現職の上司と退職に向けた調整を行い、退職日も定まった段階で転職先企業へ入社承諾の連絡をしました。

これから

2019年3月末を現職の最終出社日とし、4月は有給を消化、5月から転職先の企業へ入社する予定です。

現職は10年近く働いたこともあり、社内や取引先に知り合いも多く、特に親しい人・お世話になった人には最終出社日までにできる限り会って、これまでのお礼も含め話をしておきたいと思っています(現在進行中)。

4月の過ごし方はまだ計画中です。

最後に

昨年2018年5月の連休中、私は漠然と「プログラミングを学んで簡単なアプリ程度を作れるようになりたい」と思いながら、書店で初心者向けの本を手に取っていましたが、まさかその1年後にプログラミングを仕事にする職に就くことになるとまでは想像していませんでした。

日々の行動を変えることが、自分の考えも変え、(ちょっと大げさな言い方ですが)人生も変えてしまうのだと実感しました。

いずれにせよ、まだWeb系エンジニアとしてのキャリアのスタート地点に立ったばかりですので、これからも変わらずインプット・アウトプットを継続していきたいと思います。

今回の転職活動を応援して下さった方々、本当にありがとうございました!

そして

2019年5月から予定通りWebエンジニアとして働き始めました。

以降の話はこちらからどうぞ。

PyPIへのPythonパッケージ登録方法を解説|ダウンロード数の調べ方も

はじめに

先日、ちょっとした機能のPythonパッケージを作成して、PyPIへの登録やWeb API化などを行いました。

shonansurvivors.hatenablog.com

PyPIへパッケージを登録したのは今回が初めてで、当初はその方法を全く知らなかったため、以下のPythonもくもく会を利用して半日がかりでトライ&エラーにて完了させました。

mokupy.connpass.com

その際のメモをもとに、登録方法をQiitaに投稿しました。

PyPIへのPythonパッケージ登録方法

Qiitaに投稿した記事では、以下の流れに沿って、PyPIへパッケージを登録する方法を解説しています。

  1. テスト環境・本番環境のPyPIのアカウント登録
  2. wheel, twineのインストール
  3. setup.pyの作成
  4. python setup.py bdist_wheelの実行
  5. (任意).gitignoreの編集
  6. (任意)テスト環境のPyPIへのパッケージ登録とpip install
  7. 本番環境のPyPIへのパッケージ登録とpip install

詳細は以下の記事を見てください。

qiita.com

PyPIへ登録したパッケージのダウンロード数を調べるには

PyPIへ登録した自分のパッケージがどれだけ利用されているか(ダウンロードされたか)は気になりますよね。

これに関しては、PePyで調べることができます。

pepy.tech

私の自作パッケージは、一時期Qiitaのデイリートレンド入りしていたということもありますが、1週間で900回もダウンロードされていました。

最後に

自作のパッケージをPyPIに登録すると、

  • 今後そのパッケージを自分自身が別のプロジェクトで使う際にpip installで導入できるので非常に便利

ですし、

  • 他の人にも使ってもらえる、またどれだけ使ってもらえたかを可視化できてやり甲斐にもなる

というメリットがあることを今回実感しました。

今後もPythonで何かの機能を作る際は、パッケージ化してPyPIへ登録することも意識していきたいと思います!

Python版悟空語ジェネレーター「gokulang」を作った振り返り

はじめに

先日、きんみさん(@_kinmi)の悟空語ジェネレーターに触発され、Pythonモジュール版であるgokulangとそのWeb API版を作成して公開したので、その振り返りです。

qiita.com

目次

反響

ありがたいことにtwitter上でもたくさんの方に紹介していただきました。

そのおかげもあって、Qiitaでデイリートレンド入りし、120以上もいいねを獲得しました。

何がウケたか

モジュール化してPyPIに登録したり、Web API化したりと自分としては初の試みを行なっており、作者本人は勉強の意味で実はマジメに取り組んでいたりするのですが、Qiita記事タイトルの方は遊びました。

ここで滑らず、反応があったのは嬉しかったですねー。

悟空語に変換しても'Ruby'は'るびー'のままだし、'PHP'は'ぴーえぇちぴー'で'ぺぇそん'ほどのインパクトは無いし、Pythonやってて本当に良かった。

ペーぴーえぇ(PyPI)

'PyPI'は、'ペーぴーえぇ'になります。

Python関連は、'Py'が付くことが多いから、悟空語と相性が良いです。

テストについて

きんみさん(@_kinmi)の悟空語ジェネレーターでは、とある固有名詞の悟空語変換がなかなか思うようにいかず、苦労されています。

その為、gokulangではテストを書いて、デグレートに備えました。

これもテストの勉強になりました。

# ...

class GokuLangTest(unittest.TestCase):
    def setUp(self):
        self.G = GokuLang()

# ...

 def test_dekami(self):
        q = 'ぱいぱいでか美'
        a = 'ぺぇぺぇでか美'
        self.assertEqual(a, self.G.translate(q))

#...

最後に

gokulangの作成に取り掛かる前は、完全二番煎じなのが少し気掛かりではありましたが、皆さん好意的に受け止めて下さって良かったです。

何より、Pythonモジュール化、Web API、テストと自分にとっては良い勉強になりました。

Qiitaでいいねして下さった方々、twitterで紹介して下さった方々、そして今回のきっかけを作って下さったきんみさん(@_kinmi)、ありがとうございました!