taisablog

taisa's engineer blog

Firebase Cloud Firestore 使い方の勘ドコロ

2019/06/18   -JavaScript
 

FirebaseのCloud Firestoreを扱う際、本家ドキュメントが充実していて検索すればすぐに出てくるのでそれほど困ることはありません。ただ、最初の入りとしてFiresotreのDocumentって何? となったり、doc、docRef、cityRef、cityDocRef、snapShot、docs など、本家ドキュメントの中でも若干変数名の書き方が異なっていたりします。その為、慣れてくれば大丈夫ですが、慣れるまで毎回どう書くんだっけ?と検索することが多かったので、自分なりに解釈して整理してみました。Firestoreを扱える言語は様々用意されていますが、ここでは、JavaScript(Nuxt.js)を例に進めていきます。(セットアップは省きます) 参照元:https://firebase.google.com/docs/firestore/manage-data/add-data?hl=ja Firestoreの基本的な考え方 基本的な考え方は、正にこの図にあるように「フォルダ(collection)」「ドキュメント(document)」「データ」という構成になっています。 参照元:https://firebase.google.com/docs/firestore/data-model これをFirestoreの管理画面でみるとこのようになります。 これを「フォルダ(collection)」「ドキュメント(document)」「データ」に当てはめてみるとこのようになります。イメージとしては、本棚にフォルダが並んでいてフォルダを選択するとフォルダの中のファイル一覧がみることができ、あるファイルを選択するとそのファイルに書かれている内容をみることができるという感じです。 ◯◯Refとは 本家ドキュメントをみると、◯◯Refという変数がよく出てきます。これはその名の通り「参照」です。つまり本棚にあるフォルダ(collection)やフォルダ内のドキュメントを選択した状態です。この時点ではまだ参照なので取得はしていません。usersコレクションを選択した状態であればuserRef、usersコレクションのドキュメントを選択した状態であればuserDocRefといった変数をつけると分かりやすいと思います。(本家ドキュメントではそのようなルール決めはありません。) userRef = db.collection(‘users’) userDocRef = db.collection(‘users’).doc(‘YLu7bG7PcRNYhAg3F6MY’) これらを踏まえて、実際にデータの取得、追加、更新、削除のコードを書いてみます。ここではあえて◯◯Refのように変数を使っています。 コレクション配下のドキュメントデータをすべて取得する usersコレクションを参照した状態で、get().then()を呼び出すとその時点のドキュメント一覧(snapShot)が取得できます。ドキュメントは1つしか存在しない可能性もありますが、ドキュメント一覧なのでforEachでループすることで全データを取得することができます。ユーザIDはデフォルトでドキュメントに振られるIDです。 const db = firebase.firestore(); let userRef = db.collection(‘users’) userRef.get().then((snapShot) => { snapShot.forEach((doc) => { this.users.push({ user: doc.data(), user_id: doc.id }) }) }) ユーザID ユーザ名 ユーザメールアドレス {{user.user_id}} {{user.user.name}} {{user.user.email}} 参考:https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja コレクション配下のドキュメントデータをフィルタして取得する フィルタするのにwhereを利用することができます。whereで対象を絞った後、同様にget().then()を呼び出すとフィルタしたドキュメント一覧が取得できます。 const db = firebase.firestore(); let userRef = db.collection(‘users’) userRef.where(‘name’, ‘==’, ‘山田太郎1’).get().then((snapShot) => { snapShot.forEach((doc) => { this.filteredUsers.push({ user: doc.data(), user_id: doc.id }) }) }) ユーザID ユーザ名 ユーザメールアドレス {{user.user_id}} {{user.user.name}} {{user.user.email}} 参考:https://firebase.google.com/docs/firestore/query-data/get-data?hl=ja 単一のドキュメントデータを取得する 単一のドキュメントデータを取得するには、doc()にIDを渡し、get().then()を呼び出すと指定したドキュメントのデータが取得できます。この場合、doc()で単一のドキュメントを指定しているので、取得できるのは一覧ではなく指定したドキュメントの値となります。 const db = firebase.firestore(); let userRef = db.collection(‘users’) userRef.doc(‘YLu7bG7PcRNYhAg3F6MY’).get().then((doc) => { this.user = doc.data() this.user.user_id …

小学校6年間の算数から中学3年間の数学までを復習してみた

2019/05/30   -未分類

はずかしながら小学校算数から中学校数学までを復習してみたのでまとめておきます。 動機 もともとはこちらの「文系エンジニアが機械学習に入門するために小学校の算数から高校数学までを一気に復習してみました。」の記事を見たのがきっかけでした。復習しようにもどうアプローチしたらよいかわからなかったからです(私の場合は機械学習よりかはただの興味という感じです)。もともと高校数学を少しやってみようかと思っていましたが、そもそも高校入ってからは真面目に授業を受けていなかったので高校数学などほとんど覚えていません(高校入るまではそれなりに勉強していましたが..)。それで高校数学をやるとすぐくじけそうなので、中学数学までをやってみることにしました。タイトルに時間があるのも心理的にとっつきやすくてよかったです。 教材 教材は記事にあった以下の教材を使いました。公立高校受験レベルですがとても分かりやすくまとまっていてよい本でした。ほとんど通勤時間にみていたのでかかった時間は分かりませんが、小学校算数は6時間もかからず、中学校数学は大体6時間くらいだったかと思います。ただ読んでいるだけだと分かった気になるだけなので、こちらの問題「都道府県別 公立高校入試[問題・正答]」を少し解いたりしました。 小学校6年間の算数が6時間でわかる本 中学3年間の数学を8時間でやり直す本 目次 小学算数 PART1 分数の計算 PART2 少数の計算 PART3 面積図・線分図・方程式 PART4 すばやく計算 PART5 割合 PART6 比 PART7 単位量あたりの大きさ PART8 速さ・時間・道のり PART9 平面図形 PART10 立体図形 PART11 比例・反比例 PART12 場合の数 中学数学 PART1 正の数と負の数 PART2 文字式 PART3 1次方程式 PART4 連立方程式 PART5 因数分解と展開 PART6 平方根 PART7 2次方程式 PART8 確率 PART9 1次関数 PART10 関数y=ax2 PART11 図形 PART12 三平方の定理 おまけ ついでに暗算も少しは早くできるようになりたいということで検索して一番にヒットした「暗算を簡単にする10の方法」も少しやってみました。他にもよい暗算の方法があれば教えてほしいです。 左から右に 細かい文字をシンプルに 分数、少数のきまりを覚えておく 数字の「0」と「5」を利用する 倍数を使いこなす 大まかな数字を出す 数字を”リフレーズ”と”リアレンジ”する 答えが合えばそれでいい 億単位の数字にも計算方法はある チップを計算する簡単な方法 まとめ まだまだ先ですが子供らの高校受験まではある程度教えられるかなという気持ちになりました。ただ実際にはちょっと問題を解いただけなので、またその頃になったら復習しているかもしれません。次は時間を見つけて高校数学で面白そうな分野(機会学習にも役立ちそうな?)を選択してやってみようと思います。

私はこうしてGoogleに入社/退社しました系記事まとめ

2019/04/02   -未分類

  ここ最近少しブームになっていた、「私はこうしてGoogleに入社/退社しました」系の投稿が、どれも興味深い内容だったので、あとから見返しやすいようにまとめてみました。 記事一覧 Google退職します|eqsan|note2019/3/15が最終出社日でした。インターン期間も含めると4年ちょっと勤めたことになります。 ちょうど昇進してプロジェクトも一区切りついたタイミングで他にすごくやりたいことができたので転職という形です。 素晴らしい環境なのに情報が少なくて、入ると良さそうなのに敬遠している人を何度か見たので、この記事が参考になれば幸いです。辞める人が言うのも変な話ですが。 … 私はこうやってGoogleに入った (ソフトウェアエンジニア、中途採用編)( 人にお願いするだけじゃなくて自分も貢献しろよということで昔話を書いてみました。 kazawa フォーマット に従っています。) 学生時代 … 私はこうやって(12年前) Google に入った書け、という天の声 が聞こえたので書いてます。 私は修士まで物理学を専攻していて、情報系の勉強は特にしていませんでした。ただ、実験結果をまとめるために awk を使ったり(256倍本とか知っています?)、シミュレーションをするために Fortran 書いたり(関数名の長さに制限ありました)はしていました。 … 私はこうして Google に入った (SWE・新卒編) – ふしみのブログ最近、 Google や大学が開催しているキャリアイベントなどに参加する機会がおおかったので、そこで話したことをまとめて書いてみました。2017年4月入社なので、現在2年目が終わろうとしているところです。 なるべく汎用的に、具体的な対策を中心に書いたので、他の 外資 系企業の採用面接にも役立つかもしれません。参考にしていただければ幸いです。 こうしてGoogleに入社した(kumagi編) – Software Transactional MemoTL;DR AtCoder やろうぜ Google の(僕から見て)偉い人が立て続けにブログを書いており ここ数件の僕のブログへの反響を読んでも「Googlerだから特別」みたいな意見が散見され、入社へのハードルが変に高く見られてしまっている気がするので、僕が Google に入社する準備として取り組んでいた事とそのレベルを紹介する。程度の低さに安心して欲しい。 英語 … こうしてGoogleに落ちた – Easy to typeTL;DR Leetcodeをもっとやる必要がありました Googleの社員が選考過程についてブログを書いています。ちょっと前にNTTブームを引き起こした id:kumagi さんとか。 ところで、僕も Google … 私はこうやってGoogleに入った(新卒ソフトウェアエンジニア) – n-yoda’s blog長い記事を書く人が多いので短くて簡潔なものをと思って書きました、が、思ったより長くなりました。 小さい頃からやっていたところが強みです。周りに聞ける人が一人もいなかったので ググる のが得意。大学で習う以上の強そうな知識とかはあまり無いです。 研究室の先輩方がホームページに載せているものを参考にして書きました。 何もしませんでしたが、何度かやった TopCoder は多分役に立ちました。 TOEFL ITP 547/677点。 私はこうやってGoogleに入りました(Reiko編)プログラミングスキルは? プログラミングは仕事用のコードを自己流で書きちらかしてるだけだったのでコーティングには全く自信がなく、そのリクルーターさんからいくつか資料が送られてきたので、参考にして勉強しました。Cracking the Coding Interview、プログラミングコンテストチャレンジブック、あといくつかアルゴリズムの本(思い出したら書きます)などをやりました。 … Google に入るまでの話Google に入るまでの話. GitHub Gist: instantly share code, notes, and snippets. いかにしてわたしは Google に入社し、そして退職したか – The Decisive Strike長山です。2019 …

PHPによるDBUnit超入門

2019/03/29   -PHP

例えば簡単なWebサービスでMVCのフレームワークを使っていてビジネスロジックを書く用にコントローラとモデルの間にサービス層を追加して開発している場合、コントローラやサービスはモックを駆使しながらテストを書いていくことができます。ただ、例えばフレームワークをバージョンアップしたい、PHPをバージョンアップしたいなどの場合に既存のモデル層に影響がないかをテストで確認したいなんてことがあります。そのような場合には、DBUnitを導入してみてもいいかもしれません。ということで本記事ではPHPによるDBUnitの使い方を書いてみます。 事前情報 今phpunit/dbunitをインストールしようとすると以下の文言が出力されます。詳しくはこちらのissueに書いてありますが、どうもSebastianさんはdbunitのメンテナンスをやめるようです。ただそれを受けてforkしたプロジェクトが出てきているようなので大丈夫かと思います。今回はSebastianさんの純正dbunitを使っています。 Package phpunit/dbunit is abandoned, you should avoid using it. No replacement was suggested また、DBUnitに関する詳しい情報はマニュアルにありますのでご確認ください。https://phpunit.de/manual/6.5/ja/database.html#database.implementing-getdataset 作成したサンプルプロジェクト 今回は、dbunitの確認だけをしたいので、dietcakeのmessage-boardというサンプルプロジェクトを利用しました。今回作成したDBUnit用のサンプルプロジェクトは GitHub からダウンロードして確認できます。 git clone git@github.com:taisa831/phpunit-dbunit-sample.git cd phpunit-dbunit-sample composer install # mysqlサーバを立て`app/config/sql/board.sql`を実行する(SQLは下記に記載しています) # テスト実行 ./vendor/bin/phpunit PHPUnit 7.5.8 by Sebastian Bergmann and contributors. ….. 5 / 5 (100%) Time: 207 ms, Memory: 4.00 MB OK (5 tests, 14 assertions) アプリ用のDDLです。開発用DBとは違うのでboard_dbunitというテーブル名にしています。 — — — Create database — CREATE DATABASE IF NOT EXISTS board_dbunit; GRANT SELECT, INSERT, UPDATE, DELETE ON board.* TO board_root@localhost IDENTIFIED BY ‘board_root’; FLUSH PRIVILEGES; — — Create tables — USE board_dbunit; CREATE TABLE IF NOT EXISTS thread ( id INT UNSIGNED …

C言語初級者がMacのコンソールで実行可能なテトリスを作ってみた

2019/03/26   -C

C言語初級者がMacのコンソールで実行できるテトリスを作ってみました。参考にした動画はこちらです。テトリスについてはWikipediaも参考にしました。この投稿では作ってみた上で気になった箇所をピックアップして解説していきます。全ソースコードはこちらで確認できます。これについては、Youtubeにあげている方にも許可を頂いています。 テトリス – Wikipedia 日本では、 1988年にセガ・エンタープライゼス(後の セガ・インタラクティブ)から発売された アーケード版( セガ・システム16版)の人気により浸透した。当時はまだ操作法が確立されていなかったが、このシステム16版の登場以降は同作のものが日本国内における 事実上の標準となり、その影響力から特に「 セガテトリス」とよく呼ばれる( 2000年にアーケードと … 拙い動画でお恥ずかしいですが、どうぞご利用下さい。 — 館長 (@gamedokan) 2019年1月9日 まずテトリスの枠を作る まず最初にテトリスの枠を作ります。テトリスの枠は横が12個、縦が22個のブロックでできています。なので下の図のようにそのブロック箇所へ1を立てて、ブロックを描画していけばよいことになります。 単純に書くと以下のようになりますが、それを少し整理してchar field[FIELD_HEIGHT][FIELD_WIDTH];のフィールドに値を格納する書き方に変更すると以下のようになります。 # 単純に書いた方 #include <stdio.h> #include <memory.h> #define FIELD_WIDTH 12 #define FIELD_HEIGHT 22 int main() { for (int i = 0; i < FIELD_HEIGHT; i++) { for (int j = 0; j < FIELD_WIDTH; j++) { if (j == 0 || j == FIELD_WIDTH – 1 || i == FIELD_HEIGHT – 1) { printf(“■”); } else { printf(” “); } } printf(“\n”); } } # 整理した方 #include #include #define FIELD_WIDTH 12 #define FIELD_HEIGHT 22 char field[FIELD_HEIGHT][FIELD_WIDTH]; int main() { …

GitLabのprivateなPHPライブラリをcomposer installするには

2019/03/20   -PHP

社内ツールでprivateなリポジトリに置いておきたいけど、いろんなプロジェクトでcomposer installしたいというケースは以外とあるんじゃないかと思います。そういう時は、composer.jsonにrepositoriesを追加して、GitLab(ここではGitLabとしています)のURLを指定するとインストールが可能になります。しかしそのままだとpublicなリポジトリしかだめですが、privateなリポジトリであれば、GitLabからPersonal AcessTokenを取得して、composer config –global –auth gitlab-token.gitlab.com [ACESS_TOKEN]を実行すればcomposer installが可能になります。 { “name”: “taisa831/sample-framework-app”, “license”: “MIT”, “authors”: [ { “name”: “taisa”, “email”: “g5.taisa831@gmail.com” } ], “require”: { “taisa831/sample-framework”: “dev-master” }, “repositories”: [ { “type”: “vcs”, “url”: “git@gitlab.com:taisa831/sample-framework.git” } ] } では、Webフレームワークをprivateなリポジトリに公開して利用するところまでをやってみます。 (今回は便宜上publicにしています) 事前準備 ここではサンプルのWebフレームワーク(実装なし)をプロジェクトにインストールできるようにすることにします。リポジトリは2つで、フレームワークの実態であるsample-frameworkとフレームワークの雛形となるsample-framework-appを用意しておきました。それぞれの構成は以下の通りです。 https://gitlab.com/taisa831/sample-framework.git # フレームワークの実体 . ├── README.md ├── composer.json ├── src ├── tests └── vendor https://gitlab.com/taisa831/sample-framework-app.git # フレームワークの雛形 . ├── README.md ├── composer.json ├── composer.lock ├── config ├── controllers ├── models ├── public │   └── index.php ├── routes ├── tests └── views このsample-framework-appのcomposer.jsonには上記でも記載した内容が書かれています。requireにtaisa831/sample-frameworkを指定し、repositoriesにGitLabのURLを指定することで探してくれるようになります。 { “name”: “taisa831/sample-framework-app”, “license”: “MIT”, “authors”: [ { “name”: “taisa”, “email”: “g5.taisa831@gmail.com” } ], “require”: { …

PHPライブラリをPackagistに登録する方法

2019/03/18   -PHP

PHPのライブラリをPackagistに登録する方法を書いておきます。PackagistはPHPのパッケージリポジトリで、登録しておくとcomposerを使ってプロジェクトへインストールすることができます。ここではとあるプロジェクトをPackagistに登録する前提の流れで進めていきます。 Packagistに登録するプロジェクトを作成する 新規でプロジェクトを作成しcomposer initを実行します。 mkdir amazon-photo-formatter cd amazon-photo-formatter composer init composer initを実行すると色々と聞かれるので順番に進めていきます。まずはパッケージ名が聞かれます。<vendor>にはGitHubのアカウント名を指定し、<name>にはライブラリ名を記載します。ここではtaisa831/amazon-photo-formatterと記載しました。 Package name (/) [taisa831/packagist]: Descriptionはライブラリについての説明文なので、Format amazon photo file name to amazon photo’s format.と書きました。その他についてもサジェストされている内容とするか必要な内容を決めて進めていきます。 Description []: Author [Masaki Sato , n to skip]: Minimum Stability []: Package Type (e.g. library, project, metapackage, composer-plugin) []: library License []: MIT 次にこのライブラリが依存しているものがあればこの時点で指定することができます(後から手動で記載することも可能)。ここではphpunitを利用するのでrequire-devでphpunitを指定しました。 Would you like to define your dependencies (require) interactively [yes]? no Would you like to define your dev dependencies (require-dev) interactively [yes]? Search for a package: phpunit Found 15 packages matching phpunit [0] phpunit/phpunit [1] phpunit/phpunit-mock-objects Abandoned. Use instead. [2] phpunit/php-token-stream [3] phpunit/php-timer [4] phpunit/php-text-template [5] phpunit/php-file-iterator [6] phpunit/php-code-coverage [7] …

PHPの empty, isset, is_null の違いをしっかり理解する

2019/03/08   -PHP

PHPの isset、empty、is_null をしっかり理解して使おうと思い整理してみました。既にこのような記事「PHP isset, empty, is_null の違い早見表」もあるのでここではこれより少し踏み込んだところまで書いてみます。 empty, isset, is_nullの違い早見表 値 if ($var) empty isset is_null $var = 1 true false true false $var = array(1) true false true false $var = “” false true true false $var = “0” false true true false $var = 0 false true true false $var = array() false true true false $var = false false true true false $var = NULL; false true false true $var false true false true まず表ですが、順番を理解しやすい形に変えてみました。下記のように赤と青のグループで分けて考えておくと理解しやすいです。これをみると「if ($var)とempty」、「issetとis_null」が対になっているのがわかります。 感覚的には、if ($var)は値がありそうだなと思うものがtrueになり、emptyも値がなさそうだな思うものがtrueになる感じがします。issetは、何かしら値がセットされてばtrue(つまり値がfalseでも結果はtrue)、is_nullは値がnullであればtrueということになります。 実際の挙動の動作確認についてはPHPUnitを使ってテストしたものをGitHubにあげているので合わせて確認してみてください。https://github.com/taisa831/AimaiPHP empty, isset, is_null の Notice や Error 出力早見表 次に、PHPのerror_reportingをE_ALLにした場合に、indexのない配列にアクセスした場合やオブジェクトが空の変数や関数にアクセスした場合の挙動をまとめてみました。 値 if ($var) empty isset is_null $var = []; …

2019年の抱負

2019/02/21   -未分類

本業頑張るのはもとより、2019年の抱負がある程度固まってきたので書いておきます。 Google Cloud Platformを使う これまでAWSを自分で多く触るケースはあまりありませんでしたが、GCPを使うケースが増えてきたので今年からはAWSではなくGCPをたくさん触っていこうと思います。 数学をやる 高校3年になるまでは大学行く気もなく全く授業をまともに受けていませんでした。高校2年の終わり頃に少しまじめに授業を受けるようになり、少しずつ数学が楽しくなってきた頃大学進学も視野に入ってきました。そんなときに自分が文系を選択していたことを知り、私立受験は英国社の三教科であることを知り(国立など受験の仕組みすら知らず)、そこで自分の数学学習人生は終わりました。そんなこんなで今までやってきたのですが、ふと最近以下の投稿をみてなんとなくやってみようかなと思いはじめました。記事のようにAIや機械学習の為ということも少しはありますが、自分としてはただの興味ですのでどこまでやれるかはわかりませんが、今小学中学の復習を終え数I・Aをちらちらみはじめています。 文系エンジニアが機械学習に入門するために小学校の算数から高校数学までを一気に復習してみました。 宅建をとる 今の本業が不動産テックということもありますが、これもただ興味が出てきたのでやってみようかなという感じです。宅建みやざき塾というYoutube動画が秀逸なので今はこの動画を移動中などにみています。 体力をつける 小さい子供が2人いると休日にランニングすることもままならないので去年は体重がかなり増えてしまいました。運動ができてないだけでなく、肩こりなど疲れやすい状態になっていたのでこれを今年は改善しようと思います。最近は食事や運動を気にしつつ「長生き味噌汁」をはじめました。 まとめ どこに向かっているのかという感じはありますが、本業で事業を伸ばすことを頑張りつつこれらをやっていこうと思います。

2018年振り返り、プレイングマネージャーは難しく

2019/01/09   -ポエム
 

2018年は1月から正式に新しい環境で働き出した年になりました。また7月に2人目の子供が生まれたのも大きなイベントの1つとなりました。そんな中、個人としてはある程度やれたかなと思うところもありますが、逆に色々と反省することも多くあった年になりました。 主目標 業務として 業務として立てた目標は、今年1年で目安としていたところまで到達することができたように思います。ただその反面、目標に固執するあまり他のことに手が回らず結果的に周りに迷惑を掛けてしまいました。この点においては反省すべき点でしたが、昨年自分の活動していたことは今年につながることだと信じてやっていたことでもあるので、今年を大事にしていこうと思います。 CTOとして 選択と集中 7月に2人目が生まれたことで1人目以上に個人の時間がなくなりました。なので2人目が生まれてから、まずはコミュニティ活動を抑えることにしました。また、業務でも自分のやることは限定していたつもりでしたが、それでもいつのまにか設計・レビュー・マネージメント・運用・外部連携等やることが増えていき上記にもあるように周りに迷惑をかけてしまいました。 プレイングマネージャーは難しい 前職でも現職でもやっていて毎回思うことですが、プレイングマネージャーは難しいです。クライアントと調整しながら、社内マネージメントしながらどちらにおいても自分がコードを書くことを並行して進めると、自分でもびっくりするようなイージーミスをしてしまったりします。こういう場合、自分が思っている以上に割り切って余裕をもってタスクをこなすのが必要なんだと思います。 速度と品質担保 速度と品質については、色々と考えた上で薄い自社フレームワークを導入しました。これ自体はよかったと思いますが、導入時に不具合を起こしてしまったこともあり、早い段階だったとはいえイケイケゴーゴーでいきすぎたなと反省しました。 チームビルディング その時にあった開発体制をと思い、自分がスクラムマスター役をやり開発メンバーには開発に専念してもらうというゆるい感じのスクラムを導入しました。ただそれはチームにとっては逆効果(メンバーに開発タスクを丸投げのような形)になってしまいました。前職で最後1年間ガッチリスクラムでやっていたこともあり、同じ感覚で進めてしまっていたのがよくなかったです。リモートが多いというのもありますが、コミュニケーションは大事だなとあらためて思いました。 エンジニアリング 自分と後輩エンジニアだけでやっていたことですが、サブプロジェクト的に社内WebフレームワークをGitLab内で公開、社内ツールをGitHubに公開するなどの取り込みをしました。このような取り組みは好きで以前からやっていることで、効果が大きいことも多いので続けていこう思います。 学習技術は機械学習 今年からAIPyハンズオン勉強会を不定期で開催しました。参加人数は少ないもののなんとか4回程実施できたのでよかったと思います。 https://aipy.connpass.com/ ブログ継続 ブログは最低月1(年12投稿)、最高月2(年24投稿)以上が目標でしたが今年は18投稿にとどまりました。 英語でコミュニケーションできるように この件は別投稿に書いたのでスキップします。 2018年の英語振り返り 毎年英語力向上を目指して何かしらやったりやめたりしていますが、今年の英語はどうだったかなと振り返ってみます。そもそも海外で働く予定もなく日々英語でコミュニケーションを取るという状況にはすぐにはならないのでゆるゆるとやっています。とはいえ年1で海外に行った時に簡単なコミュニケーションくらいはできるようになりたいというのが今年の目標でした。 今年は5月にシンガポールへ行きました。PyCon … 株に投資をする 年始めにやる予定でしたが、マイナンバーカードが紛失していて再発行手続きするまで時間があいてしまったため口座開設までにとどまりました。口座は楽天銀行、イオン銀行に開設しました。少しずつ資金を集めてやってみようと思います。 執筆 共著ではあるものの個人的には今年最大の取り組みとも言えるものでした。関係者には感謝です。 React、Angular、Vue.js、React Nativeを使って学ぶ はじめてのフロントエンド開発 コニュニティ活動 今年は、マレーシアで開催されたPyCon APACに参加し、参加レポートをgihyoさんに寄稿することができました。 「PyCon APAC 2018 in Singapore」参加レポート 2018年5月31日(木)~6月2日(土)にかけて行われた「PyCon APAC 2018 in Singapore」。後半の2日間に行われたカンファレンスデイの様子やセッション以外の現地滞在の様子などを,当日参加したメンバーが2回にわたってお届けします。 まとめ 新しいことに挑戦することができたり色々失敗したりと多くのことが経験できた年になりました。また、業界関係ない人と飲むことが多く普通に色んな人と楽しく飲んだり遊んだりできたのも今までにない感じで楽しく過ごせました。今年も健康と安全第一になるだけ楽しくやっていきたいと思います。