とあるIT屋の独白

ITや経営について主に書きます

Auth0について調べてみた

最近、Auth0という認証サービスについて見かけることが、ちょくちょくあります。私の前の現場のときに導入が検討されていたようで、その時はざっくりとさわりだけ認識していた程度なのですが、今回あらためてどんなものか調べてみました。
Auth0とは、すごくざっくりいうと従来からあるシングルサインオンを、クラウドでより使いやすくしたサービスになります。シングルサインオンについては、下記の記事の通り、一度ログインすれば複数のサービスにまたがって、認証済みとなるような仕掛けになります。オンプレで構築するとしたら、ActiveDirectoryやLDAPが使われることが多いのかなと。

シングルサインオンとは】
https://kfep.jp/authentication-news-2016-04-15-3123

認証基盤を自社で整備するには構築にも運用にも手間がかかるので、Auth0のようなサービスの価値が出てくるわけです。Auth0はSNSアカウントなど様々なサービスと連携可能かつ、組み込む側の選択肢やSDKもかなり充実してるので、自社で構築するよりもかなり楽なのではないかと思います。

【認証プラットフォーム Auth0 とは?】
https://qiita.com/furuth/items/68c3caa3127cbf4f6b77

具体的にどんな感じで使うか、下記の記事にまとめられてます。Auth0経由でGoogleのアカウントでログインすると、自動で自WordPressのサイトのユーザも作成してくれています。

【【Auth0】Auth0事始め/WordPressのユーザー認証をAuth0+Google Appsシングルサインオンしてみる】
https://dev.classmethod.jp/security/auth0-signin-wordpress/

Auth0では認証時に自分のRuleも書けて、制限とかもできそうです。Javascriptで処理を書くことが、可能みたいです。

【「Auth0」のRulesが便利機能だった!! / 『「Auth0」で作る!認証付きシングルページアプリケーション』でAuth0をさわってみた
https://blog.pirox.dev/2019/05/04/231114

Oracle Databaseの新しい機能について調べてみた

Oracle Databaseは年次のリリース方式となったことにより、今年も新しい20cが出ます。
前の会社ではOracle Databaseを使ってきたのですが、やはりライセンス料が高く、今やもう使うこともないだろうと思っててあまりキャッチアップしてきませんでした。ただ、最近色々新しい機能を追加するそうで、少し調べてみました。
新しめの機能について、下記の記事に概要がまとめられてます。ブロックチェーンやイベントストリームが、気になるところとして挙げられます。

Oracle Databaseのブロックチェーン、マイクロサービスなど新技術との親和性とは?】
https://enterprisezine.jp/dbonline/detail/12652

では上記の記事で紹介された機能について、ざっと調べてみたので書いてみたいと思います。
まずマルチテナントですが、12cで既にある機能になります。CDB(マルチテナント・コンテナ・データベース)の配下に、PDB(プラガブル・データベース)が配置され、CDB配下のPDBはサーバのリソースが共有され使用されます。

【Oracle12cの目玉機能! マルチテナント・アーキテクチャをぶったぎってみた】
https://amg-solution.jp/blog/6292

次はイベントストリームの機能。イベントストリームについては昨年、Oracle CloudにてKafkaの接続APIが使える下記記事の機能をリリースしてます。20cではKafkaがDatabaseの中で使えるとのこと。

Oracle Streaming の Kafka 互換機能の正式リリース】
https://blogs.oracle.com/oracle4engineer/streaming-kafka

最後はブロックチェーンOracleは元々「Oracle Blockchain Platform」というブロックチェーンを構築できるような、下記のサービスを提供しています。20cではこれをDatabaseの中で使えるようにして、SQLのインターフェースでアクセスできるそう。

Oracle Blockchain Platform】
https://docs.oracle.com/cd/E83857_01/paas/blockchain-cloud/index.html

20cは従来のRDBに加え、RDBの枠からちょっと広がった機能も追加されてきてて、新しいことをやりたい場合はライセンス料が少し高くても、検討の候補に入れてもよいのかなと感じました。

WebAssemblyを使う意義

WebAssemblyについて、かなり前になりますが本ブログで取り上げました。
https://toaruit.hatenablog.com/entry/2018/02/10/203926
それから、少し前にW3C勧告でWebの標準になったこともあり、実例はおそらくまだ少ないものの期待されている技術として、たびたび話題になります。ので、今回はWebAssemblyを使う意義について取り上げてみたいと思います。
まずは、あらためてWebAssemblyの概要から。下記の記事にある通り、ブラウザ上でバイトコードを動かす仕組みになります。C言語などからWebAssembly形式のバイナリに、コンパイルできます。

【WebAssembly(wasm)とはなにか?Googleやアップルも関わる期待の技術】
https://yokonoji.work/webassembly-754

WebAssemblyを使う意義ですが、一点目はものによっては速度の向上が見込める、という点です。例えば、ゲームなど計算処理が多くなるような場合は、採用してみてもよいかなと思います。逆にそこまで計算処理を要しないサイトであれば、導入のメリットは薄いのかなと。

【WebAssemblyをちょろっと触って速度測ってみる。】
http://namazu-tech.hatenablog.com/entry/2017/12/02/012600

実際にWebAssemblyを使って、ブラウザで動くよう移植した例は下記の記事に。Doom3のような3Dのゲームでも、移植は難しそうですがいけるみたいです。

【あのDoom3ゲームがWebAssemblyを使ってブラウザ上で動く - Gabriel Cuvillier氏とのQ&A】
https://www.infoq.com/jp/news/2019/10/doom3-web-assembly-port/

また、WebAssemblyで取り組みがされているのはセキュリティ面。Webのアプリで脆弱性ゼロで構築するのは、かなりスキルが求められる感はあります。WebAssemblyを使うことで、脆弱性を突くような処理が実行された際に、プラットフォーム側でブロックのようなことをしてくれるのが、今後期待できるかなと。

【Webアプリの脆弱性から影響を受けないソフト基盤の確立に向けて、「Bytecode Alliance」が発足】
https://www.atmarkit.co.jp/ait/spv/1911/14/news137.html

ちなみに、WebAssemblyを使用してRustだけでWebアプリを作れるフレームワークがあるそうで、開発者にとって利用しやすい取り組みとかも増えそうな感じはしますね。

【Kagura - RustだけでWebアプリケーションを開発するフレームワーク
https://www.moongift.jp/2019/11/kagura-rust%e3%81%a0%e3%81%91%e3%81%a7web%e3%82%a2%e3%83%97%e3%83%aa%e3%82%b1%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3%e3%82%92%e9%96%8b%e7%99%ba%e3%81%99%e3%82%8b%e3%83%95%e3%83%ac%e3%83%bc%e3%83%a0/

コンテナの利用について今一度考えてみる

今や環境構築にdockerを使うことも、珍しくなくなってきてると思います。IT関連の記事を見ても、かなりの頻度でコンテナ関連のトピックが取り上げられていて、まだまだホットな領域だなと感じています。ということで、今回は改めてこのコンテナの利用について、書いてみたいと思います。
まずはコンテナとは何かという点。基本的な考え方は仮想マシンと同じで、一つのサーバ(もしくはPC)で別の環境が建てられるものになります。では仮想マシンとコンテナで違いはなにかというと、OSの位置付けになります。仮想マシンでは一環境一OSになりますが、コンテナでは複数環境が一OS上で動きます。これによって、ハードのリソースを効率的に使うことができます。

【コレ1枚で分かる「仮想マシンとコンテナの違い」】
https://www.itmedia.co.jp/enterprise/spv/1612/19/news041.html

ちなみに、dockerは基本Linuxなのですが、ディストリビューションやバージョンの違いは上手いこと吸収してくれます。ので、違うバージョンのLinuxとかでも、動かせるわけです。

【なぜDockerではホストOSと違うOSベースのコンテナイメージが動くのか】
https://qiita.com/kirikunix/items/33414240b4cacee362da

コンテナの利用用途としては、ローカル環境での開発用途という使われ方が、今のところ多いのかなと感じています。それを本番で使うとなると、コンテナの状態やリリースのための準備をする必要がでてきて、そのためのツールが以前に本ブログで紹介したKubernetes( クーベネティス)になります。
https://toaruit.hatenablog.com/entry/2018/05/02/190043

Kubernetesは運用事例もポツポツと出てきてる感じはしますが、ちゃんと運用するにはスキルが求められてきます。下記の記事は、はてなの撤退事例ですが、ちゃんとエンジニアをつけないと自前での運用はかなり厳しい感じを受けます。

Kubernetesの自前運用は難しい? はてなの撤退事例】
https://www.atmarkit.co.jp/ait/spv/1911/08/news009.html

もちろんAWSGCPで、マネージドサービスがあるので、自前でやるよりも楽な環境はあるかなとは思います。ただ、それでもKubernetesの機能自体は日々更新されていて、それなりにキャッチアップや運用は手間がかかる気はしています。
Kubernetesを使うかどうかは、下記の記事にあるようなメリデメを、一度検討してみるのもよいかなと感じます。今のPaaSはコードをアップすれば動くものがたいていなので(内部的にはコンテナらしい)、運用の楽さや利用コストなど比較して、環境を選ぶべきなのかなと。

Kubernetes、PaaS、Serverlessのどれを選ぶのか? 機能比較と使い分けのポイント】
https://thinkit.co.jp/article/14044

AtCoderに一年くらい取り組んでみて

明けましておめでとうございます!。とうとう2020年になりましたね。「2020」ってなんかゾロ目っぽくて、節目の年な感じもありますよね。
さて2020年の最初は、去年の初旬から取り組んでいるAtCoderを取り上げてみたいと思います。AtCoder自体は去年一年で、メチャメチャ参加者が増えてる感があって、去年の初頭のコンテストの順位と最近の順位を比べると、明らかに下がってます。。また、参加している人は学生さんが多いみたいですね。

AtCoder を始めようかと思っている学生たちへ】
https://blog.kcg.ne.jp/futurelab/2019/10/04/atcoder/

そして、私の現時点のレートの推移は以下の通りです。一年くらいコンテスト参加してますが、いまだに茶色ですね。

f:id:ti7140:20200103022204p:plain

ちなみに、茶色がどのくらいのレベルかというと、下記のchokudaiさんの記事では
「学生で茶色なら優秀だがエンジニアとしてはちょっと物足りない。派遣とかで来たエンジニアが茶色あれば一安心。」と位置付けられています。仕事でエンジニアを一応やってる身としては少し寂しい感はあります。。

AtCoder競技プログラミング)の色・ランクと実力評価、問題例】
http://chokudai.hatenablog.com/entry/2019/02/11/155904

では今の私くらいのレベルでどの程度の問題が解けるのかというと、以下の通りです。コンテスト毎に所感を書いてみました。

AtCoder Beginner Contest(ABC)》

C問題までは、大体解けるようになってきました。簡単なときはD問題まで解けるときも、たまにあります。ギリギリ解ける問題のレベルとして、以下くらいの難易度。愚直にあてていくようなロジックは、けっこう慣れてきたように感じます。

AtCoder Beginner Contest 147 C - HonestOrUnkind2】
https://atcoder.jp/contests/abc147/tasks/abc147_c

 

AtCoder Regular Contest(ARC)》

ここ1年くらいは、企業が主催のコンテストがARCのレベルのコンテストになってます。だいたい私のレベルだとB問題くらいまで、解けるかなという感じです。以下の問題が、まぁ解けるくらいかなと。

ディスカバリーチャンネル コードコンテスト2020 B - Iron Bar Cutting】
https://atcoder.jp/contests/ddcc2020-qual/tasks/ddcc2020_qual_b

 

AtCoder Grand Contest(AGC)》

AGCは1問目も、解ける気がまだしないです。。1問目からこんな感じの問題が出ます。

 

AtCoder Grand Contest 038 A - 01 Matrix】
https://atcoder.jp/contests/agc038/tasks/agc038_a

 

ちなみに、各コンテストの難易度は以下の記事の「コンテストの種類」の通り。

 

AtCoder (アットコーダー)】
https://w.atwiki.jp/projecthikky/sp/pages/124.html

今年はできれば緑色まで、上げていければなと思ってます。
本年もよろしくお願いします!。

年の瀬に共感について考えてみる

2019年もそろそろ終わりですね。今年も色々なことがありましたが、自分も接する人や取り組んでいることに変化があって、気づけばあっという間だったと思います。
2019年について個人的に感じたことは、「共感」の重要性が今まで以上に高くなってきてるという点です。代表的な例でいうと宮迫さん・亮さんの謝罪会見で、それまで一方的に批判の的だった彼らが、あの会見で一定程度の大衆の共感を得たことにより、世論の論調もそれまでとは変わった方向に行きました。インターネットやSNSがより身近になったことにより、共感する側も発信がしやすくなってきてるのも影響してると思います。
また、日本はモノやサービスが供給過多な状態が続いていて、選択の基準として共感することも大事になってる気がします。下記の記事であげられているのが飲食店の例ですが、トップの発言や従業員の就業環境に批判が起き、提供してるサービスに概ね問題ないものの、客足が遠のいてしまうといったことも実際に発生しているかなと思います。

【サービスの時代から「共感」の時代へ】
http://www.re-live.com/news/160/

今までの経済は「お金」を中心に回ってきました。私はお金とは信用を可視化したものだと思っていて、言い換えると今までは信用をベースに、色々な取引が行われていました。この絶対的だった信用から、共感へのシフトが少しずつ起きてるかなと感じてます。

【信用が陳腐化し共感の時代がやってくる。あなたは何のために働くか?】
https://www.businessinsider.jp/post-190806

ただ、ある程度の信用は取引等を行うにあたって必要だし、お金の存在がすぐになくなるということもないでしょう。共感が重要視されているとはいえ、共感だけで物事を判断するのは、それはそれで危険だと思います。情報商材やマルチといった類は、共感を前面に押し出してくる傾向にあると感じるので、信用できる相手かどうか性悪説の観点で見極める必要もあると考えてます。
共感は、信用より不確かなものだと私は思っていて、例えば共感されなくても仕事等を積み重ねていくことで、信用は得られると思います。ただ、今後は信用プラスアルファで共感が求められてくるだろうことが想像され、共感が思うように得られないゆえのジレンマが増えていく気がします。現状でも、無理に共感をもとめてしまい、結果がついてこないゆえにツラくなってる人もいるのかなと感じます。

【「共感を求める」からうつ病になる】
http://dessindezyoutatsu.xyz/post-1797

自分が共感されないと感じたら、共感を無理に求めるのではなく、信用を積み重ねていくことに重点を置くのがストレスを減らすことにもつながるかなと思っています。共感が得られなくても仕事はできるし、不確かなものに頼るくらいなら確実なところをちゃんと押さえていくのが、まずは大事なのかなと。
かくいう私もあまり自分の考え的なのが共感されないこともあって、まぁ別に理解されなくてもいいかなと思ってしまうことも多々あります。しかし、これだと中々世界が広がらないのも事実なので、来年こそはここら辺もう少し改善しようかなと考えています。
少し長くなってしまいましたが、みなさん良いお年を。。

リレーションシップ駆動要件分析(RDRA)とはなにか

本ブログで何度か要件定義を取り上げましたが、ここをしっかりやることがその後の工程で正しいものが作れるかのポイントになると思ってます。要件定義は重要な工程にもかかわらず、システム開発の工程の中で手法などが議論されることがあまりないかなと個人的に感じています。要件定義を行う前にまずは要件がどのようなものかを整理することが必要で、今回は要件を分析する手法の一つであるRDRAについて、取り上げてみたいと思います。
RDRAとはすごくざっくり言うと、UMLのような表記方法で要件の分析を行なっていくものです。表記すべきものはシステムの価値や、システムの境界(システムで実現するもの)など、要件定義にあたって認識をそろえておくべきものになります。

リレーションシップ駆動要件分析(RDRA)】
https://qiita.com/tatane616/items/f7f4e5ad818fe8b125d6

RDRAで大事な点として考えられるのは、表記の厳密性よりも、いかに重要な情報を伝えられるかという点だと感じます。もちろん文章に落とすのも良いのですが、文章だけだと伝わらない部分や議論が活発化しにくい面もやはりあるので、UMLを活用した表現はありなのかなと思います。

【要件定義支援ツール「要件のツボ」によるRDRAの実践】
https://codezine.jp/article/detail/5848

UMLは基本的に設計手法としての位置付けになり、厳密性が求められてしまう傾向にあることから、あまり開発現場には広がっていない感はあります。下記の記事のような批判はありますが、個人的には表記方法自体はよく出来てるなと感じるので、要件定義などにも活用していく取り組みは、悪くないのかなと考えています。

【日本であまり読まれないUML批判記事】
https://qiita.com/MarkAda/items/de6d6bb5882c8aa04b65