記事一覧
- 開発プロジェクト
- フロントエンド実装例 (Next.js) frontend-example-next
- フロントエンド実装例 (Vue.js) frontend-example-vue
- バックエンド実装例 (NestJS) backend-example-nestjs
- バックエンド実装例 (Quarkus) backend-example-quarkus
- Micronaut Restful API サンプルプロジェクト(micronaut-rest-api)
- Vue.js + NestJSデスクトップアプリ(vue-nest-desktop-app)
- Vue.js + Jerseyデスクトップアプリ(vue-jersey-desktop-app)
- Spring MVCデスクトップアプリ(spring-mvc-desktop-app)
- example-test-restassured 自動テスト実装例 (rest-assured)
- Markdown・マインドマップ変換ツール(md-to-mm)
- Markdown形式での入出力に対応したアウトラインエディタ(tree-view)
- 自動車 TCO(総所有コスト)見積もりツール
- 自動車 TCO見積もりツール Vue.js対応
- JAX-RS Web API Proxy
- Bookmark with Image
- Bookmark with Image (Flutter版)
- ブックマークレットの作り方と実装例
- ダブルス対戦表作成プログラム
- API for DMM Mobile
- Where To Go お出掛け先管理システム (en)
- Open ID Connect クライアント (en)
- アーカイブ済み
- システムアーキテクチャ
- プログラミング
- Java
- TypeScript / JavaScript
- シェルスクリプト
- Webアプリケーション / 全般
- 認証
- B2CとB2BをまたがるID管理機能を考える
- IDP起点のシングルログアウトの実装方式
- OSS / SaaS (IDaaS)
- Web Authentication
- OAuth2 / OpenID Connect
- OAuth2
- Proof Key for Code Exchange by OAuth Public Clients
- SPAでのOAuth2対応に関するAuth0ブログのまとめ
- OAuth 2.0 Security Best Current Practice (Draft 13)
- RFC 8252 OAuth 2.0 for Native Apps
- OAuth 2.0 for Browser-Based Apps
- OAuth 2.0 Mutual TLS Client Authentication and Certificate Bound Access Tokens
- JavaScript(ブラウザ環境)でOAuth2 PKCE用パラメータを生成する
- OpenID Connect
- アクセス制御(認可)
- プロトコル
- セキュリティ
- ブラウザ
- E2Eテスト
- DevOps / CICD
- 認証
- Webアプリケーション / フロントエンド
- TypeScript / JavaScript
- Vue.js
- AngularJSでCSVファイルを出力する
- AngularJS + Gulp の開発環境を作る
- AngularJSのminify対策(ng-annotate)
- React Quick Startを簡単に復習できるサンプルコード (en)
- ReactとMaterial-UIでControlled Componentを実現する
- OpenLayersで中心座標(緯度・経度)を取得する
- PWA (Progressive Web Apps) の概要
- DataTablesでのAjaxエラー処理
- angular-datatablesの使い方
- 自作JavaScriptライブラリを公開できるCDNサービス
- TypeScript / JavaScript
- Webアプリケーション / バックエンド
- Java
- 逆引きQuarkus
- 逆引きMicronaut
- Spring Boot:Restful APIサンプルプロジェクト
- Spring BootでREST APIを実装する
- Spring MVCでPost-Redirect-Getパターンを実装する
- Spring MVCサンプルアプリ
- EclipseでのSpring Bootアプリケーション開発
- JerseryのリソースクラスでSpring AOPを使うときの注意点
- Spring FrameworkにおけるBeansとは
- Spring Bootの依存性注入(DI)設定方法
- Spring Boot DBコネクションプール
- JAX-RS Tips
- Web API認証のための時限トークン管理クラス (en) (en)
- Play Framework (en)
- Play Frameworkのセッション管理 (en)
- Node.js (TypeScript / JavaScript)
- Nest.jsでSwagger (Open API) とバリデーション用のデコレータを記述する
- TypeScriptでSSHポート転送する
- Express.jsでタイムアウトレスポンスを返却する
- Node.jsでURLからファイル名の拡張子を抽出する
- Node.js モジュール読み込み (en)
- MongoDB Node.JS Driver コネクション管理 (en)
- MEANスタックでREST APIを実装する
- MEANスタックでCRUDアプリを実装する
- MEANスタックでの認証状態制御
- MEANスタックでログイン機能を実装する
- Node.js OAuth 2.0 + JWT
- puppeteerを使ったスクレイピング
- Herokuでpuppeteerを動かす
- 開発環境構築
- Go
- インフラ
- その他
- Java
- ネイティブアプリ
- 機械学習 / データサイエンティスト
- 開発ツール
- ドキュメンテーション
- Windows
- 書籍
- その他
- 英語版の開発者向けナレッジ共有サービス
- 開発者イベント・カンファレンスまとめ
- OpenID Summit Tokyo 2020まとめ
- Developer Summit 2019 Summerまとめ
- オープンソースカンファレンス 2019 Tokyo/Spring まとめ
- Laravel 概要
- Tomcatのlogging.properties設定方法
- シェルスクリプトでJSONを扱う
- bashrcとbash_profileの使い分け
- シェルスクリプトでの正規表現を使ったバリデーション
- ascii-table-to-sql MySQLコマンドのASCIIテーブルをSQLに変換する
- MySQL 存在しないユーザー削除時のエラー回避方法
- NOSQL DATA MODELING TECHNIQUES 要約
- Google Cloud Print APIを使った印刷手順 (en)
- Bootstrap3 フォームレイアウト
- Apache mod_proxyとmod_aliasの共存
- Google ChromeでAdobe Flashを有効化する
- サイクリング
- トレッキング
- 旅行
- ガジェット
- アメリカ赴任
- その他
ダブルス対戦表作成プログラム
仲間内でテニスの大会を行うことになり、対戦表を作ることとなった。トーナメントや総当たり形式であれば簡単であるが、今回は次のような複雑な条件で組む必要があった。
- ダブルスのペアを固定せずに一定数のゲームを実施する。
- プレイヤー全員が同じ回数だけゲームに参加できるようにする。
- 同じプレイヤーの組み合わせのゲームや同じペアとなることをできる限り防ぐ。
- 同じプレイヤーができる限り連続してゲームにならないようにする。
これらの条件を満たす対戦表を人力で作るのは困難であったため、簡単なプログラムをPythonで実装した。難しいアルゴリズムを使っている訳ではなく、乱数ベースで条件を満たす組み合わせをひたすら探す単純なものではあるが、実装内容を紹介する。
OpenID Summit Tokyo 2020まとめ
OpenID Summit Tokyo 2020が2020年1月24日に開催された。私は残念ながら参加できなかったが、公開された資料の中から興味のあるものを読み込んで、簡単に要点を整理した。
The Future of Identity
- パスワード認証(エンタープライズ環境)
- エンタープライズSSOが主流となり、Password Vault(パスワード管理システム)はPrivileged Account Managerを除いて不要となるだろう。
- パスワード認証(コンシューマ環境)
- ID連携プロトコル
- アクティブクライアント
- モバイルOSがログイン・決済の管理やパーソナルアシスタントとしてユーザーに代行して動くアクティブクライアントになるだろう。将来的にはユーザー間の繋がりの提案やユーザー行動の監視による異常検知、ユーザー行動の助言も行うようになるかもしれない。
- その他
Personal Digital Transformation and Holistic Digital Identity
- Identityの専門家はPersonal Digital Transformation (PDT) による新しい要求を認識できていなかった。
- これらの変化はゆっくりと進んだために、変化を感じ取ることができなかった。
- PDTにより物理世界でできているIdentityの扱いがデジタル世界でも求められるようになる。
- ユーザーが記憶したパスワードを入力して行うアクセス制御は最も原始的な方法である。
- IdentityはSelfness(自己の同一性、独立性)とWhoness(他と区別する特徴)に分解できる。
- 従来のIDベースのサービスは基本的なWhonessの提供であり、それぞれには以下の技術が対応する。
- Whoness:OIDC Aggregated and Distributed Claims、DIDs、OpenID SIOP
- Selfness:認証器・ウォレットアプリ、IDF Hub、Hyperledger Ariesエージェント
Enabling Large-Scale Multi-Party Federations with OpenID Connect
- 研究・教育分野では多くの大規模なIDフェデレーションが行われているが、ほとんどはShibbolethで構築したSAML2で行われている。
- OpenID Research and Education Working Groupでは研究・教育分野での利用を検討していて、Shibbolethプラグインも一部の機関で登場してきている。
- SAMLの反省点を踏まえ、スケーラブルなフェデレーションを実現するため、OpenID Connect Federationの策定が進んでいる。
次世代 IDaaS のポイントは本人確認
- Identity is the new perimeter
- Idenrity Management for Enterprise
- 社員の入社・異動・退職に対して迅速なID・アクセス権管理が求められる。
- IDaaS選定にあたっては、SaaS連携機能(プロビジョニング・フェデレーション)、ID管理機能(オンプレ連携)、セキュリティ監視サービスがポイントとなる。
- 新たな要件の発生
OIDC活⽤で⽬指す⼈やサービスがつながる世界の社会実装
- bitkey社のプラットフォームのアーキテクチャについて解説されている。
- 各社のサービスや製品をつなげるために3層構造のシステムアーキテクチャとしている。
- 4つのKey Technology
- ID Access Controller:アクションごとに必要な認証強度の管理
- ID Converter:IDaaSとして各サービスのID連携を行う
- Personal Data Protector:個人情報保護とユーザーへの同意確認
- Rights Deal & Key Gen:ID間での権利の認可と鍵生成
OpenID Connectとネイティブアプリを取り巻く仕様と動向
- Yahoo! JAPANのネイティブアプリでのシングルサインオン(SSO)
- ネイティブアプリのログインをシステムブラウザを利用してOpenID Connectで行う場合、ユーザーが普段プライベートモードや別のブラウザアプリを使っていると、ブラウザのログインセッションを活用したSSOができない。
- これを解決するため、Yahoo! JAPANでは同一ベンダーのアプリのみからアクセスできる共有ストレージを利用して、アプリ間でログインセッションを共有する仕組みを実装している。
- この仕組みは1タップログイン(2013年~、月間431万回)もしくは0タップログイン(2014年~、月間909万回)として提供している。
- Open ID Connect Native SSO for Mobile Apps
- Open ID Connect Native SSO for Mobile Apps(2019年7月にdraft 03公開)の策定が進められている。
- 仕組みはYahoo! JAPANの1タップ・0タップログインと基本的には同じ。
- SSOの概フローは以下の通り。
- アプリ1はAuthorization Endpointへのリクエストで、scopeパラメータにdevice_ssoを指定する。
- アプリ1へのToken Endpoitのレスポンスで、IDトークンと一緒にdevice_token (device_secret) が返却される。
- アプリ2は共有ストレージから取得したIDトークンとdevice_secretをToken Exchange RequestとしてToken Endpointに渡す。
- アプリ2へのToken Endpointのレスポンスで、アクセストークン、リフレッシュトークン、IDトークンが返却される。
- リフレッシュトークンはSSOセッションが無効になったタイミングで無効になる。
B2C企業向けクラウドID基盤「 SELMID 」のご紹介
パスワード利用の限界や顧客属性の保証(本人確認による情報の正確性担保など)ニーズの高まりを受けて、IDaaS製品であるSELMIDの提供と導入支援をしている。
- SELMIDはMicrosoft Azure AD B2Cを基盤として追加機能を自社開発しているとのこと。
主な提供機能
OpenID Connectを活用したgBizID(法人共通認証基盤)の現状と今後の展望
Developer Summit 2019 Summerまとめ
Developer Summit 2019 Summerで参加したセッション(一部)の概要をまとめた。
大規模レガシー環境に立ち向かう有機的な開発フォーメーション
https://www.slideshare.net/i2key/devsumi-152929762
リソース効率性(稼働率を重視)とフロー効率性(リリースの早さを重視)のいいとこ取りをしたい。
タウンワークでの事例
責務ごとにチームを分け、各チームごとに予算枠を決める。 → 現場裁量で業務を進めることができる。(マイクロサービスからアーキテクチャを除いたイメージ)
- 商品開発チーム(求人情報機能開発)
- リソース効率(計画・納期)重視、ウォーターフォール開発
- グロースハックチーム(CVR向上、UI/UX改善)
- フロー効率(開発サイクルの速さ)重視、アジャイル開発
- 安定稼働チーム(障害対応/SRE)
- 組織的ゆとりとして、普段は安定稼働のためのアーキテクチャを含めた改善を行う。
- 障害発生時は全力で解決に当たる。
ヤフーのアプリにおける会社全体での業務効率化について
Yahoo! JAPANのネイティブアプリは50以上あり、サービスごとに開発チーム(エンジニア、デザイナ)が分かれている。チームの大きさや開発手法もそれぞれ異なるため、サイロ化が課題となっている。
この解決のために、CTO室アプリ統括部という全社横断チームを作った。
- メンバーはサービス開発と兼務。
- 黒帯(特定領域の第一任者)も参加し、相談しやすい環境を作る。
- 開発はペアプロエリアで週4時間(2時間 x 2回)。
横断チームでの取り組み事例
- 既存のアプリから機能を抜き出して共通ライブラリ化(ログイン処理や、アップデート機能など)
- 新技術(OSの音声機能対応、機械学習など)の調査・サービスへの取り込み
- 社内SDKのOSS化(サービスの目標に直結しない活動にも取り組みやすい)
実践 Engineering Manager ~理想のエンジニアチームを目指して~
https://speakerdeck.com/_atsushisakai/practice-engineering-manager
家族アルバムサービス「みてね」のマネージャとしての思想と実践について
マネージャがストレスを抱えないようにしていること
- 目標に対してひとつずつやっていく。
- できない・わからないことはオープンにする。
- せっかくなので充実したキャリアになるように意識を持つ。
- …など
理想のチームとは
- エンジニアがプロダクトに責任を持ち、ボトムアップで意見・提案を上げられる。
- 様々な視点で振り返りを行い、失敗や意見の対立を受け入れて学習していける。
エンジニアリングマネージャの役割
エンジニアが働きにくい状況の防止・検知・除去。そのために以下を行っている。
- 意見が対立したときの対処方法など、最低限のチーム運営ルールを作る。
- アクション可能なチーム・個人の目標をディスカッションして作る。
- 定期的な振り返りで成功・失敗を賞賛し、失敗は影響を最小化して改善につなげる。
チーム独自の学習・ボトムアップ文化
- ユーザーストーリーマッピングを企画とエンジニアが一緒に実施し、要求や課題の理解を深める。
- バックログの準備会議を行い、エンジニア目線での機能提案を行う。
- リリース管理(QA進行管理や関連部門との調整など)を輪番制にして、開発工程の影響範囲を認識する。
- エンジニアがリーダーになり、小さな改善・課題をプロジェクトとして解決する。
ソフトウェアアーキテクチャの組織力学
https://speakerdeck.com/hirokidaichi/power-theory-of-software-architecture
アーキテクチャとは何かをしにくくする代わりに、何かをしやすくする構造
例)Web開発フレームワークは、Web開発以外をしにくくする代わりに、Web開発をしやすくする。
→ 社会をとりまく目に見えない力を生み出す構造 = アーキテクチャ
アーキテクチャを構成する様々なパースペクティブ
- プロジェクト(マネジメント)
- 組織構造
- 組織とシステムは同じ構造に変化しやすい。(悪い組織構造 ⇔ 悪いシステム構造)
- 技術的負債は組織がシステム構造を必要な速度で変える能力を失うこと。
- ビジネス構造(モデル)
- ミッション → 戦略 → アクションという目的・手段構造に合わせたシステム構造が望ましい。
- ビジネスの変動に対してロバストになる。(アクションが変わったときは対応するシステム要素のみ変更すればよい。)
アリババW11を支えるインフラの技術
天猫(B2B向けのECサイト)が11月11日(W11)に開催する巨大セール 2018年の実績:取り扱い高 3.5兆円/日、商品発送 10億件
このセールに対応するために毎年インフラの改善を積み重ねてきた。
- CDNキャパシティの予測精度向上
- リソーススケジューラの開発(リソース管理の手順書が2000を超えてきていた)
- 複数リージョンに跨ったリクエストの分散
- オンライン処理とバッチ処理のリソース管理統合(リソース融通)
- ストレージへのアクセスをTCPからRDMAに変更
- …など
SI × Webの総合力で切り拓く新しいエンジニアのキャリアパス
(株式会社メドレー:オンライン診療アプリCLINICSなどを展開する)
従来はアプローチが異なっていたSI系とWeb系のエンジニアだが、X-Techの登場で両者のスキルの組み合わせが求められるようになってきている。
- X-Techでは法規制・ガイドラインへの対応や関係省庁との調整が必要となる。
- このため、Web系のテクニカルスキル(開発スピード、モダン技術)に加えて、SI系のビジネススキル(業務設計、調整)が求められる。
医療系システムでの大変なところ
- 日本国内法の適用が及ぶ場所に設置する必要がある。
- 医療機関に対して必須となるクライアント認証
- レガシーな医療システム(病院内システム)との連携
クラウドネイティブ時代のマルチテナントアーキテクチャとデータ設計
(株式会社エイトレッド:クラウドアプリ基盤ALTLED Work Platformを開発)
アーキテクチャ:AngularJS + Java (JAX-RS) + MongoDB / Elasticsearch / Redis
アーキテクチャ詳細(バックエンド)とマルチテナント対応方法
- APサーバ:ECS(on EC2)
- MongoDB
- EC2上に構成(プライマリ1台、レプリカ2台)
- テーブル名でテナント分離 → 今後はサーバー分離を入れていく
- Elasticsearch
- インデックス(RDBでのテーブル)でテナント分離
- (参考)リクエストのテナント識別
- セッションにテナントIDを入れている(できればドメインで識別できると楽)
パフォーマンス改善への取り組み
システム設計の先導者 ITアーキテクトの教科書[改訂版]
https://www.nikkeibp.co.jp/atclpubmkt/book/18/267970/
本書では、システム開発の各ライフサイクルでITアーキテクトのすべきこと(成果物)が、筆者の経験を基に解説されている。要件定義から運用・保守、システム再構築に渡って必要な成果物の作り方が例を交えて説明されているので、網羅的かつ具体的な内容となっている。
本書の元となった日経SYSTEMSの記事が2013年のものであることと、対象がエンタープライズシステムであることから、最近のWebシステムには必ずしも当てはまらないもの(ウォーターフォール開発や、RDBMS前提のデータモデルなど)もあるが、このようなシステムでは本書の成果物の一部のみ作成すれば十分な場合が多いため、十分参考にできる。
オープンソースカンファレンス 2019 Tokyo/Spring まとめ
数年ぶりに参加したので、聴講したセッションの内容をまとめた。
https://www.ospn.jp/osc2019-spring/
(1) OpenSDS,始めてみませんか(BOF)
OpenSDSとは
各社のストレージ製品を統一管理するためのソフトウェア(管理のみでデータ送受信は既存のプロトコルを使う。)
Kubernetes CSI (Container Storage Interface) 用のDriverも開発されている。
現在のステータス
開発コミュニティはLinux Foundationがホストしている。EMCやHuaweiに加えて、NTTコミュニケーションズ、Yahoo! Japanといった日本メーカーも参加して開発を進めているが、現在はまだデモができるレベルの完成度となっている。
参考
(2) Ansible・Serverspecベースの自動化のフレームワークSHIFT wareの紹介
SHIFT wareとは
TIS株式会社が開発するインフラ管理自動化のためのオープンソースソフトウェア
https://shift-ware.github.io/ja/
Ansibleの設定ファイルとServerspecのテストコードをExcelから自動出力できる。インフラ管理者が使い慣れているExcelを使うことで、導入時の学習コストを下げられる。
(3) Elastic Stackでマイクロサービス運用を楽にするには?
Elastic Stackとは
Elasticが開発するデータの収集・検索・分析・可視化のためのOSSの組み合わせ
- Beats
- 軽量データシッパー
- パケット、ファイル、各種メトリクスなどを送信する。
- LogStash
- データのパースや変換を行う。
- Elasticsearch
- Kiabara
- データを可視化・ダッシュボード機能を提供する。
SaaS版(Elastic Cloud)やオンプレミス版(Elastic Cloud Enterprise)も提供されている。
マイクロサービス運用での活用
Beatsファミリーでマイクロサービスの様々なデータを収集できる。
外形監視:Heatbeat
メトリクス:Metricbeat
ログファイル:Filebeat
APM (Application Performance Monitoring) にも対応している。
- 各アプリケーションフレームワーク用のエージェントを組み込むことで分散トレーシングができる。
その他に、通常時のログから機械学習でモデルを作成し、異常検知を行う機能(有償)もある。
参考
(4) スケールアウト型データベース GridDB
GridDBの概要
- 東芝デジタルソリューションズ株式会社が開発するビッグデータ・IoT向けのスケーラブルなデータベース
- 2013年に製品化した後、2016年に基本機能をオープンソース化した。
- 社会インフラに関わるシステムで多くの運用実績がある。
データモデル
- NoSQLで一般的なキーバリュー型とは異なり、行指向に近いキーコンテナ型というデータモデルを採用している。
- キーバリュー型では各行をキーとバリューの組み合わせで表現するが、キーコンテナ型ではキーに対応するコンテナに行を格納する。
- 時系列データを扱いやすく、コンテナ内では行単位のACIDトランザクションもサポートされる。
クラスタ構成
- ノード間でマスターノードを自動的に決定するため、管理ノードが不要で単一障害点がない。
- ノード間でのデータの偏りが生じないように、データの再配置を自律的に行う。
性能比較
- 主としてメモリにデータを格納することで高速なアクセスを実現する。
- Yahoo! Cloud Service BenchamarkではCassandraを上回る性能が出ている。
参考
自動車登録の住所変更手続き
転居したときには自動車登録の変更が必要となるが、警察署と運輸局の両方に出向く必要があり、手続きが複雑になっている。 備忘録として、自分の経験をもとに自動車登録の氏名・住所変更手続きの流れをまとめた。
(1) 自動車保管場所証明を取得する
各都道府県の警察署で自動車保管場所証明(車庫証明)を取得する。(申請と証明書受け取りで警察署に2度出向く必要がある。)
準備するもの
- 自動車保管場所証明申請書
- 保管場所の所在図・配置図
- 所在図は地図のコピーを添付できるが、手書きでも10分程度で書ける。
- 参考:https://syako-osaka.com/archives/538
- 自動車保管場所使用承諾証明書(もしくは駐車場契約書の写しなど)
※ 申請書は各県警のWebサイトから入手できる。(長野県の場合:長野県警Webサイト)
(2) 自動車登録を変更する
運輸局支局で自動車登録内容の変更を申請する。
準備するもの
- 申請書(第一号様式)
- 車検証
- 自動車保管場所証明(発行から1ヵ月以内のもの)
- 戸籍謄本(発行から3ヵ月以内のもの)
※ 申請書は運輸局のWebサイトからダウンロードできる。