よしたく blog

ほぼ週刊で記事を書いています

vuex-persistedstate でログイン状態を維持する

Vuexを使ってログイン情報を保持する実装をおこなったが、ブラウザをリロードすることでVuexが初期化されてしまいログアウトされてしまった。ログイン情報を永続化するためには、Vuexのプラグインとして用意されている 「vuex-persistedstate」 を使うことで解決できる。

github.com

インストール

npm install vuex-persistedstate

使い方

使っているVuexにplugins: [createPersistedState()]を用意するだけで使える。この一文だけで永続化ができるので非常に便利!

export default new Vuex.Store({
    state: {
      ///
    },
    mutations:{
      ///
    },
    getters: {
      ///
    },
    actions: {
      ///
    },
    plugins: [createPersistedState()]
})

オプション

一文だけで使えるのは非常に便利ではあるのだが、実運用を考えると少し工夫が必要になる。次に用意したオプションを考慮に入れると良い。まずkeyは永続化状態を保存する際のキーとなるものである。デフォルトではVuexとなるため、複数のアプリケーションで使う場合はアプリ名などで一意となる値をいれたい。次にpathsは保存したいstateを指定する。この値を指定しない場合はすべてのstateが保存対象となる。保存対象を絞りたい場合は、明示的に記述していく。例では、tokenだけが永続化される設定になる。最後にstorageはデフォルトでlocalStorageに保存されるようになっている。他にもsessionStrageとCookieが選択できる。Cookieは設定のためにjs-cookieが必要だったりするため割愛する。sessionStrageを使う場合は、window.sessionStrageに変更すれば良い。

 state: {
      userId : "",
      token : "",
  },
  plugins: [createPersistedState(
    key: 'Vuex',
    paths: ['token'],
    storage: window.localStorage
  )]

じぶん Release Notes 0.29.11

3月1日〜31日のあいだの出来事がリリースされました。

技術・開発関連

取り組み

技術面での取り組みは以下の通りです。

イベント

個人的なこと

参加したイベントは以下の通りです。

読んだ

ブログ

リリースノートを除き、次のエントリを書きました。

PV数

3月は2938でした。

3月の目標結果

  • 水曜日の15時までにブログを出す
    • 達成
    • 目的と目標を適切にたてたうえで実践できたと思う。今月で終わりの形ではないので、今後も継続していきたい。
      • 目的
        • 人に役立つ記事を書きたい
      • 目標理由
        • Write-Blog-Every-Weekで設定されている週中のリマインドがこのタイミングのため
  • 週1でフットサル
    • ほぼ達成
    • 3週目までは達成していたが、4週目はコロナウイルスによる情勢変化により自粛していた
    • 下旬にリングフィットアドベンチャーが到着したため、運動の継続自体はこちらでおこなっている
      • 目的
        • 痩せたい

4月の目標

OKR的に組み立ててみた

OKR的に組み立ててみた

  • 多くの人とコミュニケーションを取りたい
    • ブログのPVを4000にする
      • Vue.jsについて2記事書く
      • Djangoについて2記事書く
      • Azureについて2記事書く
    • Twitterのフォロワを700人に増やす
      • Desin Itの輪読会をおこない学んだことを発言していく
      • エリック・エヴァンスのドメイン駆動設計で学んだことを発言していく
      • 趣味の分野についての発言を増やす
      • 1日30分英語を勉強する
      • 1日30分中国語を勉強する
  • 健康を維持する

コードでシステムアーキテクチャを描く「Diagrams」

「Diagrams」 を使うと、システムのアーキテクチャ図をPythonのコードで作成できる。 各クラウドサービスはもちろんのこと、OSSで使われているソフトウェアのアイコンまで用意されており、もう自分で画像探しの旅に出る必要がない。 プレゼンテーションツールでサイズや位置を微調整で苦労していた人は「Diagrams」に乗り換えて、スクリプトで一発作成できるのメリットを体感してみよう!

diagrams.mingrammer.com

「Diagrams」「Nodes」「Clusters」

Diagramsは大きく分けて「Diagrams」「Nodes」「Clusters」の3つで構成されている。

「Diagrams」

ライブラリの名前にもなっている「Diagrams」は、後に登場する「Nodes」「Clusters」をまとめる一番外側の枠組みとなる。「Diagrams」に設定した名前が出力される画像の名前にもなる。

他にもいくつかのパラメータを設定することで柔軟に画像を出力することができる。

  • direction
    • データフローの方向
    • デフォルトは左から右
    • 上から下に流れを変更したい場合はTBと入れる
  • outformat
    • 出力ファイルの形式
    • デフォルトはpng
  • show
    • コマンド実行後に保存されたファイルを開くかどうか
    • デフォルトはTrue
      • システムのデフォルトアプリケーションで開かれるためWSLを使っている場合はFalseを使ったほうがいい

Diagrams · Diagrams

「Nodes」

「Nodes」はアプリケーション1つつを表すオブジェクトになり、EC2であったりBLOBのアイコンを表す。ノードごとのひも付きは、ソースコード上で「>>」「<<」と表す。

Nodes · Diagrams

「Clusters」

「Clusters」はノードをグループ化することができる。Webサーバとして3台EC2を立てているときなどまとめて表現することができる。「Diagrams」と同じくdirectionがあるので処理の方向性の調整ができる。

Clusters · Diagrams

Diagramsでラムダアーキテクチャを表現してみる

公式ページにいくつかサンプルとして載っているので、こちらを参考にしながらOSSを利用し簡単なラムダアーキテクチャを描いてみた。これだけで図を表現でき、またバージョン管理をおこなえることも考えると大規模な案件のときはメリットが大きいと思う。

Examples · Diagrams

from diagrams import Diagram
from diagrams import Cluster
from diagrams.onprem.logging import Fluentd
from diagrams.onprem.analytics import Hadoop
from diagrams.onprem.analytics import Spark
from diagrams.onprem.analytics import Storm
from diagrams.onprem.queue import Kafka
from diagrams.onprem.client import Client
from diagrams.onprem.client import Users

with Diagram("lambda architecture", show=False):
    client = Client("Data")

    with Cluster("Batch"):
        hadoop = Hadoop("Hadoop")
        spark =  Spark("Spark")

    with Cluster("Speed"):
        storm = Storm("Storm")
        kafka = Kafka("Kafka")

    users = Users("Users")

    client >> hadoop >> spark >> users
    client >> storm >> kafka >> users

f:id:yoshitaku_jp:20200331173842p:plain
出力される画像

github.com

参考文献

tadaさんに「Diagrams」を教えていただいたのだが、tadaさんも「Diagrams」の記事を書いてくださっていた。インストールの方法から多くの例題が載っているので、作成する際はこちらも参考にしていただけたら。

sadayoshi-tada.hatenablog.com

Django REST FrameworkとJWTで認証を実装する

手順

インストール

まずはDjango REST FrameworkとJWTを扱うためのライブラリをインストールします。

pip install djangorestframework
pip install djangorestframework-jwt

Django REST Frameworkの設定

プロジェクトとアプリケーションの作成

次にDjango REST Frameworkのプロジェクトを作成します。django-admin startproject config .でルートフォルダ直下にconfigフォルダが出来上がります。必須ではないですが実際の環境を想定し、apiアプリケーションも作成しておきます。

django-admin startproject config .
django-admin startapp api

設定ファイルの編集

config/settings.pyにデフォルトの許可設定と認証のクラスを記述します。

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

config/urls.pyにJWTを使うためのimport文from rest_framework_jwt.views import obtain_jwt_tokenとurlpatternsの中にエンドポイントを設定するpath('api-token-auth/', obtain_jwt_token),を記述します。

from django.contrib import admin
from django.urls import path

from rest_framework_jwt.views import obtain_jwt_token


urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-token-auth/', obtain_jwt_token),
]

スーパーユーザの作成とマイグレーション

python manage.py createsuperuser
user name : admin
password Passw0rd1234
python manage.py migrate

実行

サーバを起動する。

python manage.py runserver 0.0.0.0:8000

curlで設定したURLにusernameとpasswordを投げてみるとtokenが返ってきます。

curl -X POST -d "username=admin&password=Passw0rd1234" http://localhost:8000/api-token-auth/
{"token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoxLCJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoxNTg1MTExODM1LCJlbWFpbCI6IiJ9.cDKEDtt3dPNRQREGrC3JRuu0XzHSNSzkzdp_kvQONyQ"}```

リポジトリはこちら
[https://github.com/yoshitaku-jp/sandbox-DRF-JWT:embed:cite]

【解決】django-heroku に必要な psycopg2 がインストールできない

毎回詰まっては試行錯誤して、ずっと根本原因がつかめなかったことが解決できたのでメモを残しておきます。

エラー内容

pip install django-herokuをおこなうと次のエラーが起こりました。

Collecting psycopg2
  Using cached psycopg2-2.8.4.tar.gz (377 kB)
    ERROR: Command errored out with exit status 1:

    creating /tmp/pip-install-6kaekgc5/psycopg2/pip-egg-info/psycopg2.egg-info
    writing /tmp/pip-install-6kaekgc5/psycopg2/pip-egg-info/psycopg2.egg-info/PKG-INFO
    writing dependency_links to /tmp/pip-install-6kaekgc5/psycopg2/pip-egg-info/psycopg2.egg-info/dependency_links.txt
    writing top-level names to /tmp/pip-install-6kaekgc5/psycopg2/pip-egg-info/psycopg2.egg-info/top_level.txt
    writing manifest file '/tmp/pip-install-6kaekgc5/psycopg2/pip-egg-info/psycopg2.egg-info/SOURCES.txt'

    Error: pg_config executable not found.

    pg_config is required to build psycopg2 from source.  Please add the directory
    containing pg_config to the $PATH or specify the full executable path with the
    option:

        python setup.py build_ext --pg-config /path/to/pg_config build ...

    or with the pg_config option in 'setup.cfg'.

    If you prefer to avoid building psycopg2 from source, please install the PyPI
    'psycopg2-binary' package instead.

    For further information please check the 'doc/src/install.rst' file (also at
    <http://initd.org/psycopg/docs/install.html>).

    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.

ソースからのpsycopg2のビルドを避けたい場合は、PyPIをインストールしてください と書いてあるので pip install psycopg2-binary したあとにpip install django-herokuしても同じエラーが出ました。

libpq-devのインストール

自分の解決方法は sudo apt install libpq-dev でした。今回はWSLでまっさらな状態から作ったのでlibpq-devがありませんでした。issueに原因解決の方法が載っていたので実行したら無事にpsycopg2のインストールが出来ました。

github.com

ちなみにlibpq-dev

PostgreSQLデータベースバックエンドと通信するためにlibpqライブラリとリンクするCプログラムをコンパイルするためのヘッダーファイルと静的ライブラリ。

Debianのサイトに記述がありました。

packages.debian.org

データセットが欲しいときに見るサイト

データを使って何かを実現したいと思った時に、扱えるデータがそもそもないといったことがあった。そのようなケースにおいては公的な機関が公開しているデータを頼りにして検索することが多いが、そもそもデータが掲載されているサイトにたどり着くのが困難であったり、たどり着いてもデータに不備があることもあった。今回は自分がいくつか当たってみて使えそうだったサイトをまとめて載せておくことにした。

Dataset Search

Googleが提供しているDataset Searchは2018年に公開されたサービスで、世界中の機関で公開されているデータセットを検索できるものになっている。普通のグーグル検索よりもデータセットに特化している上に、「更新日」「データ形式」「ライセンス」といった項目で絞ることも出来るので非常に使いやすい。

datasetsearch.research.google.com

欧米のデータセット

DATA.GOV

アメリカ政府が公開するサイトで、政府機関を始め各州・都市が持っているデータを集めて公開しているサイトである。使いやすいようにCSV形式になっているものもあれば、地図や図形で使われるような形になっているものもある。

catalog.data.gov

EU Open Data Portal

EU各国のデータを集めたポータルサイトである。欧州のメジャーなところから、我々にとっては少し馴染みのない東欧までデータが網羅されている。データのフォーマットもCSVやTSVで提供されていて使いやすい形となっている。

data.europa.eu

一企業やサービスが提供

NASA

一企業が公開しているパターンを想定したときに思い浮かんだNASA、調べてみたら見事に提供していました。NASAのすごいところはデータだけではなくコードなども公開しているところかなと思います。

open.nasa.gov

Kaggle

やはりコンペティションを開催しているだけあってたくさんのデータセットが置いてありました。しかし、データの説明が少ないものもあって、補助的に使うといいかもしれません。

www.kaggle.com

GASのスケジュール実行からGitHub Actionsのscheduleに乗り換えた

GitHub Actionsに定期実行ができるスケジュールがあると聞き、GASで定期的にweb hookを叩いていたスクリプトを移行した。GASでも満足していたのだが、コミュニティの成果物であったのでパブリックな場所に持っていきたかったことと、それに伴い自分しかいじれないようになっていたため移行した。

やりかた

トリガーイベントの1つであるscheduleを使っていく。これはcronのように記述しGitHub Actionsを実行できる。GitHub Actionsなので、.github/workflows/hoge.ymlの形でファイルには記述する。ファイルの中身は次のようになる。

name: schedule
on:
  schedule:
    - cron:  '0 22 * * *'
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - name: post netlify build hook
      run: curl -X POST -d {} ${{ secrets.WEBHOOK_URL }}

https://github.com/yoshitaku-jp/api-wbew/blob/master/.github/workflows/main.yml

今回は決められた時間にNetlifyのbuild hookを叩きたかったのでstepの中でcurlしている。on.scheduleにcronと記述し、実行したい時間を書いていくだけで終わる。参考情報にURLを載せさせてもらったがmottoさんがやりたかったことを既にやられていたので、ほぼすべて同じスクリプトになってしまった。ありがとうございます。

自分なりの情報としては、scheduleで実行する時間に注意が必要であることが言え、実行時間がUTCであるため日本の時間に変換する必要がある。上に貼り付けたスクリプトでは日本時間の朝7時に実行されるようになっている。

また簡単なTipsとして、GitHubのブラウザ画面からから編集しようとすると、実行時間のプレビューが出てくるのでcronに慣れていない人は少し便利かもしれない。

f:id:yoshitaku_jp:20200303175552j:plain

f:id:yoshitaku_jp:20200303175625j:plain

参考情報

mottox2.com

じぶん Release Notes 0.29.10

2月1日〜29日のあいだの出来事がリリースされました。

技術・開発関連

取り組み

技術面での取り組みは以下の通りです。

  • Azure Pipelinesを使ってCI/CD環境の構築
  • Azure Web Appsを使ってNode.jsアプリケーションの公開

イベント

コロナウイルスの影響により楽しみにしていたイベントがすべて中止になってしまいました…悔しい悲しい…

個人的なこと

参加したイベントは以下の通りです。

読んだ

ブログ

リリースノートを除き、次のエントリを書きました。

PV数

2月は2556でした。
祝日が増えたり日にちが少なかったり…しかしなかなか伸びませんね。

2月の目標結果

  • 断捨離
    • 未達
      • まだ物が残っているので引き続き…
      • しかし腰が重かったカメラを売ったのは個人的に大きい
  • PV3500達成
    • 未達
      • 3000にもいかず…
      • イベントレポのようなフロー系の記事はやめて、検索に引っかかるストック系を増やしていく
  • 平日にブログを出す
    • 達成
      • 土日に切羽詰まってやりたくなかったのもあり、また休日は休日としてリフレッシュにあてたかったので設定
      • ブログに関することは割と達成できることがわかった
  • 英語・中国語の勉強の継続
    • 未達
      • 設定が曖昧でした。週に1回もやれてなかったので反省

3月の目標

  • 水曜日の15時までにブログを出す
    • 目的
      • 人に役立つ記事を書きたい
    • 目標理由
      • Write-Blog-Every-Weekで設定されている週中のリマインドがこのタイミングのため
  • 週1でフットサル
    • 目的
      • 痩せたい

Node.jsアプリをWeb AppsにAzure Pipelinesからデプロイする

プロジェクトの中でCI/CDを組み入れる作業をおこなった。その時はAzure DevOps内のAzure Pipelinesを使い、Web AppsにNode.jsアプリケーションをデプロイした。この作業をおこなっていた中でつまづいた部分があったのでブログに手順と注意事項として書いておく。なお、CI/CDと記述したが今回の作業ではCIの部分を担う作業はなかったのでCDの部分だけ記述する。また、実際のNode.jsアプリケーションの部分は重要ではないので、ExpressでHello Worldを返すもので代用する。

環境について

Web Apps

Azure上でリソース作成をおこなう。ここではリソース作成の方法は記述しないが、今回実行する環境の情報として載せておく。

f:id:yoshitaku_jp:20200228092205p:plain

https://azure.microsoft.com/ja-jp/services/app-service/web/

Repos

今回はAzure DevOps内のReposを使用した。いわゆるGitHubのようなバージョン管理のホスティングシステムであり、Azure Pipelinesでホスティングシステム側にプッシュされたことを検知して動き出す。Azure Pipelines側で連携ができるものであれば他の種類のホスティングシステムでも問題はない。下記に連携ができるものの一例を載せておく。

https://azure.microsoft.com/ja-jp/services/devops/repos/

Pipelines

Azure PipelinesはCI/CDが実現できるサービスであり、類似ではCircleCIなどが有名である。Azure Pipelinesは CIを担当するPipelinesCDを担当するRelease が存在する。今回はCD部分のReleaseを用意し設定していく。

https://azure.microsoft.com/ja-jp/services/devops/pipelines/

設定

Pipeline作成

Azure DevOpsにログインし、左のタブにある青いロケットのPipelinesを見つける。その下にいくつか項目が並んでいるが、Releaseを選択する。次にNewを選択し、New release Pipelineをクリックする。

f:id:yoshitaku_jp:20200228142145p:plain

現在の設定ではいくつか利用想定のテンプレートが表示される。ここでは検索窓に「web apps」と入力し、「Azure App Service deployment」をクリックする。

f:id:yoshitaku_jp:20200228142344p:plain

Artifacts設定

次に、Artifactsの項目にCDのデプロイ処理を発火させる前段階の処理を設定する。ここでは「CI処理が終わった後におこなう」や「リポジトリにプッシュされたら」といったことが選べる。今回は「Reposにプッシュされたら」なのでReposを選択する。

f:id:yoshitaku_jp:20200228142622p:plain

実はこのままだと監視するリポジトリを選択しただけの状態なので、右上にある雷マークを選択し、「pushがあったら」ということを設定するため、DisableをEnabledに変更する。これでArtifactsの設定が終了し、「Reposにプッシュされたら後続の処理をおこなう」体制が作成できた。

f:id:yoshitaku_jp:20200228145612p:plain

Stages設定

次にStages部分を設定する。ここでnpm installやデプロイ先へのデプロイといった作業を設定する。今回はNode.jsのアプリケーションをデプロイするということで、expressを利用したHello Worldを返すものを想定していた。「1job 1task」をクリックし、処理を追加していく。

f:id:yoshitaku_jp:20200228152317p:plain

npm installをしExpressをインストールする作業が欲しいのでTaskを追加する。まずは+ボタンをクリックし、npmと検索をする。検索結果にnpmが出てくるので選択するとTasksの中に挿入される。

f:id:yoshitaku_jp:20200228152451p:plain

現在の順番だとデプロイした後にnpm installをおこなうことになるので、ドラッグアンドドロップで順番を入れ替える。

f:id:yoshitaku_jp:20200228162734p:plain

デプロイ先は、Azure上で作成したWeb Appsの情報を入力・選択していく。

f:id:yoshitaku_jp:20200228162127p:plain

以上で終了となる。

URLにアクセスすると無事Hello Worldを返してくれた。 f:id:yoshitaku_jp:20200228155649p:plain

Web Apps on Windowsでの注意事項

Web AppsをWindowsで動かすと中身はIISで起動しているようで、IIS用の設定ファイル「web.config」を用意しなければいけない。また、「web.configの記述内容」「package.jsonの記述内容」「実行ファイル」の3つを揃えないと起動がしない点については注意が必要だった。

f:id:yoshitaku_jp:20200228155401p:plain

おわりに

Azure PipelinesはPipelineとReleaseでCI/CDが明確に分かれている点とCDの設定がGUIでおこなえることが強みに感じた。GUIでおこなえる点は、「システムの勘所はつかめているが、プログラムに精通しているわけではないメンバ」でもYAMLファイルの編集ミスでジョブが落ちるようなことや、またコミットログの頻発や汚れるといた事がないこともメリットに感じた。

個人的には、Web Apps on Windowsの場合にIISで動いていることを知らずPipelinesのCD設定が良くないことを疑っていた部分が多く時間を費やす原因となった。個人的な成果物を「GitHubからCircleCIでデプロイ」といったことをしていたので、Azure DevOpsを使っても同じことがすぐ出来るだろうと考えを巡らせていたが、今回詰まったような「Web Apps側のことを考慮していない経験」から自らの課題でもあるラストワンマイルを意識した作業がおこなえていい経験となった。

#エンジニア銭湯 vol.4 に参加した!

第4回目となるエンジニア銭湯に運営として参加させてもらいました。エンジニア銭湯は1,2回と存在としては知っていましたがタイミングが合わず、3回目にしてLT参加させてもらった思い出があります。その初参加の3回目にて、「銭湯の空間」と「集まっている人たち」がとてもいい雰囲気を作り出しているのを感じて、運営に立候補しました。

f:id:yoshitaku_jp:20200221114125j:plain

イベント概要

f:id:yoshitaku_jp:20200221114033j:plain

場所は五反田大崎にある金春湯さん。銭湯激戦の地区の中でサウナが有名らしいです。あまりサウナは入らないので初めて知った…交互浴は頭がスッキリするのでまたやってみよう。

sauna-ikitai.com

イベントの概要はconnpassから引用させてもらいます。

銭湯でエンジニアが語るイベント「#エンジニア銭湯」。 前回はテーマワードが「ST」ということで、なんでもありな大喜利祭でしたw 今回は一転して、「幸福」をテーマに開催させていただければと思います。 昨今色々と嫌な話題が多いですが、銭湯という場にて、いい話をお届けできればと思ってますー
コンテンツとしては、定番となりました「銭湯の番台でのライトニングトーク」と「トークライブ」の2本立て。 「ライトニングトーク」はもちろん一般参加者のみなさまからもLT枠を募集したいと思います。 テーマは「エンジニアとして感じた小さな幸福」。 どんなものでも構いません!このテーマを軸にトークを募集したいと思います! 「トークライブ」のテーマは「東京と地方で働いたエンジニアに話を聞いてみる」。 リモート環境も整ってきており、どこでも働くことも可能になってきており、東京(関東圏)以外で仕事することに興味のお有りの方もいらっしゃるのではないでしょうか。 そこで、東京(関東圏)以外でエンジニアとして働いてる方の生の実態を一緒に聞いてみようと思います! もちろん良いところだけではないと思いますが、今後の皆さんのキャリアのヒントにでもなればと考えてます。 そして、最後はいつも通り、金春湯さんで入浴のあと有志で懇親会へ! それでは、みなさんのご参加お待ちしております!

engineer-sento.connpass.com

LT

今回は「幸福」をテーマに5名の方にLTをしてもらいました。

みけねこさん 小さな幸せから大きな幸せへ

docs.google.com

白柳さん ITエンジニア 幸せな生き方説

ごまなつさん 効率化からによる小さな幸福

くりまおさん 小さな幸せ見つけませんか

五反田バレー枠 中村ガクトさん

docs.google.com

トークライブ

「東京と地方で働いたエンジニアに話を聞いてみる」と言うことで、東京と浜松で働いたことがあるnoaさんのお話を聞くことができました。東京生まれ東京育ち(途中千葉)としては、関東以外の土地での暮らしが想像することができず、非情に興味深かったです。

今ではリモート会議などが活発になってきましたし多様的な働き方ができていいですね。あとは、満員電車に巻き込まれないのは羨ましいです。

グラレコ

初めて生のグラレコを見ることができました。いつも完成形がTwitterに流れてくるのは見ていたのですが、LTそっちのけで見入ってしまいました。笑

f:id:yoshitaku_jp:20200221114159j:plainf:id:yoshitaku_jp:20200221114208j:plain

感想・学んだこと

運営といいながらどこまで貢献できたかあまり自信が持てませんが、いろいろな方とコミュニケーションが取れてよかったかなと思っています。懇親会でもはじめましての方が多く、自分の技術領域とは被っていない分野の話はとても面白かったです。新しいコミュニティに深く入っていくとこういう事があっていいですね。また次回開催されれば運営として頑張っていこうと思います。

こちらはLT世話人として運営をしてくださった門屋さんのレポートです。

madowindahead.info

f:id:yoshitaku_jp:20200221114045j:plain