Google Cloud Platform(GCP)の始め方

 GCPの始め方は、GMailのアカウントを持っていればとっても簡単。持っていない場合は作りましょう。

  1. Chromeにてログインした状態で「https://cloud.google.com」へアクセス。
  2. 「無料トライアルを試す」をクリック
  3. 必要事項を入力すれば、新規プロジェクトが作成されて使える状態になります。

1.https://cloud.google.comへアクセスします。

2.「無料トライアル」をクリックすると必要事項を入力する画面へ遷移します。
 利用規約(英文)を読んで、内容確認して、「同意して続行」をクリック。次の画面でも必要な情報を入力して「無料トライアルを開始」ボタンをクリックすれば、自動的に最初のプロジェクトが作成された状態で「ようこそ」の画面が表示されます。あ、無料トライアルの2/2画面はスクリーンショットを取り忘れました。すみません。

3.「ようこそ」画面。

これで、Google Cloud Platformが使える状態になりました。

そして、みなさんはこのあとGCPを何に使う予定でしょうか。
 ぼくは、このあとMarketplaceからWordPress(Google Click oo Deploy)を探し出してデプロイしました。MarketplaceとはGoogleのテクノロジーパートナーが提供している有料のソリューションサービスを検索することができて、すぐにデプロイ(展開)して利用できるサービスです。ちょうどこのページはそのサービスが利用されています。月々およそ3000円ほどかかっていますがその他は今のところ無料です。WordPressは最新版に更新するのも簡単で、セキュリティ面も安心です。
 GCPが提供しているクラウドサービスの中でも、WordPress用の仮想マシン(VM)をクラウド上に作るという、一番イメージしやすい使い方ではないでしょうか。

 そして、GCPについては、ただいまQwicklabsにて学習中です。先日GCP入門編トレーニングセミナーに参加したら、1か月分のサブスクリプションを提供していただけました。あ、Qwicklabsというのはオンラインのハンズオントレーニングサービスです。つまり1か月は、タダでWeb上のトレーニングサービスを自由に使えるということです。Googleさま、さすが太っ腹です。あと、Cloud OnAirという木曜日の18時から放送されるGoogleの新製品の機能説明番組があって、それを見て勉強しています。そちらも視聴してしばらくしたらQwicklabsのサブスクリプションをプレゼントしてくれました。
 今のところ、ひとりでもくもくと勉強しておりますが、新しい概念を自分のものにするのはなかなか難しいものですね。誰か一緒に勉強してくれる人、いませんかねぇ♪

不審物か?!

 何の前ぶれもなく、Panasonic Storeから小包が送られてまいりました。

 会社を始めるにあたり、開発の会社なんだから、やっぱりパソコンはサイコーのやつが欲しいよね、ということでLet’s noteの2019年春モデルが発売されるのを少しだけ待って、カスタマイズモデルでスペックが一番よいのをチョイスして購入しました。しばらく使っているうちに、以前使っていたSurfaceにはスタイラスペンがついていたのに、Let’s noteにはついていなかった、ということに気づきました。それで、Panasonic Storeをウロウロして付属品を見つけて、付属品と書いてあるのに別売りなのかよ~、とブツブツ言いながら買い物かごに入れておいた記憶があったのです。なので、荷物が届いたときに思ったのが、まさかスタイラスペンが届いたのか?ということです。でも、まだ一円も利益を出していない会社に、使ってみたいだけのスタイラスペンは無駄遣いだよね、と、注文ボタンは押さなかったはずなんだけど、と、自分を疑ってから、勝手に注文されて送られてきたのか、と、Panasonic Storeを疑いました。

 で、疑うのはそこそこにして、箱を開けてみました。中にはなにやら小さな箱が。

 そう、レッツノートオリジナル名刺ケースが送られてきたのでした。
中に入っていた紙には『「カスタマイズレッツノート2019春モデルご購入特典」プレゼント発送のご案内(中略)今後とも、パナソニック ストアをご愛顧賜りますよう心よりお願い申し上げます。』と書かれてありました。はい、心よりご愛顧、しちゃってますよね~。そして、、、スタイラスペンじゃなかった!
 そして、肝心の名刺ケース、ちょっとぐっときましたよ。(笑)

ローマ字変換ファンクション

 お仕事でひらがなをローマ字に変換するプログラムが必要になったのですが、ちょっと調べてみて、うまく利用できそうなやつが意外となかったのでデータベースOracle用として作ってみました。
 ご利用は自己責任でどうぞ。

CREATE OR REPLACE FUNCTION HIRA2ROMAN (HIRA IN VARCHAR2)
  RETURN VARCHAR2
IS
  TYPE tMapping IS RECORD (
    hira varchar2(10), roman varchar2(10)
  );
  TYPE tTable IS TABLE OF tMapping INDEX BY BINARY_INTEGER;
  vTable tTable;
  REP VARCHAR2(4000);
-- http://www.mext.go.jp/b_menu/hakusho/nc/k19541209001/k19541209001.html
-- 第二表があるものはそちらを優先して、変換対象のひらがなが長い順にならべる
  PROCEDURE INIT IS
    i NUMBER;
  BEGIN
    i := 1;
    vTable(i).hira := 'きゃ'; vTable(i).roman := 'kya'; i := i + 1; -- 第一表
    vTable(i).hira := 'きゅ'; vTable(i).roman := 'kyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'きょ'; vTable(i).roman := 'kyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぎゃ'; vTable(i).roman := 'gya'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぎゅ'; vTable(i).roman := 'gyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぎょ'; vTable(i).roman := 'gyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'くぁ'; vTable(i).roman := 'kwa'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぐぁ'; vTable(i).roman := 'gwa'; i := i + 1; -- 第二表
    vTable(i).hira := 'しゃ'; vTable(i).roman := 'sha'; i := i + 1; -- 第二表
    vTable(i).hira := 'しゅ'; vTable(i).roman := 'shu'; i := i + 1; -- 第二表
    vTable(i).hira := 'しょ'; vTable(i).roman := 'sho'; i := i + 1; -- 第二表
    vTable(i).hira := 'じゃ'; vTable(i).roman := 'ja'; i := i + 1; -- 第二表
    vTable(i).hira := 'じゅ'; vTable(i).roman := 'ju'; i := i + 1; -- 第二表
    vTable(i).hira := 'じょ'; vTable(i).roman := 'jo'; i := i + 1; -- 第二表
    vTable(i).hira := 'ちゃ'; vTable(i).roman := 'cha'; i := i + 1; -- 第二表
    vTable(i).hira := 'ちゅ'; vTable(i).roman := 'chu'; i := i + 1; -- 第二表
    vTable(i).hira := 'ちょ'; vTable(i).roman := 'cho'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぢゃ'; vTable(i).roman := 'dya'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぢゅ'; vTable(i).roman := 'dyu'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぢょ'; vTable(i).roman := 'dyo'; i := i + 1; -- 第二表
    vTable(i).hira := 'にゃ'; vTable(i).roman := 'nya'; i := i + 1; -- 第一表
    vTable(i).hira := 'にゅ'; vTable(i).roman := 'nyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'にょ'; vTable(i).roman := 'nyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ひゃ'; vTable(i).roman := 'hya'; i := i + 1; -- 第一表
    vTable(i).hira := 'ひゅ'; vTable(i).roman := 'hyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ひょ'; vTable(i).roman := 'hyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'びゃ'; vTable(i).roman := 'bya'; i := i + 1; -- 第一表
    vTable(i).hira := 'びゅ'; vTable(i).roman := 'byu'; i := i + 1; -- 第一表
    vTable(i).hira := 'びょ'; vTable(i).roman := 'byo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぴゃ'; vTable(i).roman := 'pya'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぴゅ'; vTable(i).roman := 'pyu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぴょ'; vTable(i).roman := 'pyo'; i := i + 1; -- 第一表
    vTable(i).hira := 'みゃ'; vTable(i).roman := 'mya'; i := i + 1; -- 第一表
    vTable(i).hira := 'みゅ'; vTable(i).roman := 'myu'; i := i + 1; -- 第一表
    vTable(i).hira := 'みょ'; vTable(i).roman := 'myo'; i := i + 1; -- 第一表
    vTable(i).hira := 'りゃ'; vTable(i).roman := 'rya'; i := i + 1; -- 第一表
    vTable(i).hira := 'りゅ'; vTable(i).roman := 'ryu'; i := i + 1; -- 第一表
    vTable(i).hira := 'りょ'; vTable(i).roman := 'ryo'; i := i + 1; -- 第一表
    vTable(i).hira := 'あ'; vTable(i).roman := 'a'; i := i + 1; -- 第一表
    vTable(i).hira := 'い'; vTable(i).roman := 'i'; i := i + 1; -- 第一表
    vTable(i).hira := 'う'; vTable(i).roman := 'u'; i := i + 1; -- 第一表
    vTable(i).hira := 'え'; vTable(i).roman := 'e'; i := i + 1; -- 第一表
    vTable(i).hira := 'お'; vTable(i).roman := 'o'; i := i + 1; -- 第一表
    vTable(i).hira := 'か'; vTable(i).roman := 'ka'; i := i + 1; -- 第一表
    vTable(i).hira := 'が'; vTable(i).roman := 'ga'; i := i + 1; -- 第一表
    vTable(i).hira := 'き'; vTable(i).roman := 'ki'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぎ'; vTable(i).roman := 'gi'; i := i + 1; -- 第一表
    vTable(i).hira := 'く'; vTable(i).roman := 'ku'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぐ'; vTable(i).roman := 'gu'; i := i + 1; -- 第一表
    vTable(i).hira := 'け'; vTable(i).roman := 'ke'; i := i + 1; -- 第一表
    vTable(i).hira := 'げ'; vTable(i).roman := 'ge'; i := i + 1; -- 第一表
    vTable(i).hira := 'こ'; vTable(i).roman := 'ko'; i := i + 1; -- 第一表
    vTable(i).hira := 'ご'; vTable(i).roman := 'go'; i := i + 1; -- 第一表
    vTable(i).hira := 'さ'; vTable(i).roman := 'sa'; i := i + 1; -- 第一表
    vTable(i).hira := 'ざ'; vTable(i).roman := 'za'; i := i + 1; -- 第一表
    vTable(i).hira := 'し'; vTable(i).roman := 'shi'; i := i + 1; -- 第二表
    vTable(i).hira := 'じ'; vTable(i).roman := 'ji'; i := i + 1; -- 第二表
    vTable(i).hira := 'す'; vTable(i).roman := 'su'; i := i + 1; -- 第一表
    vTable(i).hira := 'ず'; vTable(i).roman := 'zu'; i := i + 1; -- 第一表
    vTable(i).hira := 'せ'; vTable(i).roman := 'se'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぜ'; vTable(i).roman := 'ze'; i := i + 1; -- 第一表
    vTable(i).hira := 'そ'; vTable(i).roman := 'so'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぞ'; vTable(i).roman := 'zo'; i := i + 1; -- 第一表
    vTable(i).hira := 'た'; vTable(i).roman := 'ta'; i := i + 1; -- 第一表
    vTable(i).hira := 'だ'; vTable(i).roman := 'da'; i := i + 1; -- 第一表
    vTable(i).hira := 'ち'; vTable(i).roman := 'chi'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぢ'; vTable(i).roman := 'di'; i := i + 1; -- 第二表
    vTable(i).hira := 'つ'; vTable(i).roman := 'tsu'; i := i + 1; -- 第二表
    vTable(i).hira := 'づ'; vTable(i).roman := 'du'; i := i + 1; -- 第二表
    vTable(i).hira := 'て'; vTable(i).roman := 'te'; i := i + 1; -- 第一表
    vTable(i).hira := 'で'; vTable(i).roman := 'de'; i := i + 1; -- 第一表
    vTable(i).hira := 'と'; vTable(i).roman := 'to'; i := i + 1; -- 第一表
    vTable(i).hira := 'ど'; vTable(i).roman := 'do'; i := i + 1; -- 第一表
    vTable(i).hira := 'な'; vTable(i).roman := 'na'; i := i + 1; -- 第一表
    vTable(i).hira := 'に'; vTable(i).roman := 'ni'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぬ'; vTable(i).roman := 'nu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ね'; vTable(i).roman := 'ne'; i := i + 1; -- 第一表
    vTable(i).hira := 'の'; vTable(i).roman := 'no'; i := i + 1; -- 第一表
    vTable(i).hira := 'は'; vTable(i).roman := 'ha'; i := i + 1; -- 第一表
    vTable(i).hira := 'ば'; vTable(i).roman := 'ba'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぱ'; vTable(i).roman := 'pa'; i := i + 1; -- 第一表
    vTable(i).hira := 'ひ'; vTable(i).roman := 'hi'; i := i + 1; -- 第一表
    vTable(i).hira := 'び'; vTable(i).roman := 'bi'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぴ'; vTable(i).roman := 'pi'; i := i + 1; -- 第一表
    vTable(i).hira := 'ふ'; vTable(i).roman := 'fu'; i := i + 1; -- 第二表
    vTable(i).hira := 'ぶ'; vTable(i).roman := 'bu'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぷ'; vTable(i).roman := 'pu'; i := i + 1; -- 第一表
    vTable(i).hira := 'へ'; vTable(i).roman := 'he'; i := i + 1; -- 第一表
    vTable(i).hira := 'べ'; vTable(i).roman := 'be'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぺ'; vTable(i).roman := 'pe'; i := i + 1; -- 第一表
    vTable(i).hira := 'ほ'; vTable(i).roman := 'ho'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぼ'; vTable(i).roman := 'bo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ぽ'; vTable(i).roman := 'po'; i := i + 1; -- 第一表
    vTable(i).hira := 'ま'; vTable(i).roman := 'ma'; i := i + 1; -- 第一表
    vTable(i).hira := 'み'; vTable(i).roman := 'mi'; i := i + 1; -- 第一表
    vTable(i).hira := 'む'; vTable(i).roman := 'mu'; i := i + 1; -- 第一表
    vTable(i).hira := 'め'; vTable(i).roman := 'me'; i := i + 1; -- 第一表
    vTable(i).hira := 'も'; vTable(i).roman := 'mo'; i := i + 1; -- 第一表
    vTable(i).hira := 'や'; vTable(i).roman := 'ya'; i := i + 1; -- 第一表
    vTable(i).hira := 'ゆ'; vTable(i).roman := 'yu'; i := i + 1; -- 第一表
    vTable(i).hira := 'よ'; vTable(i).roman := 'yo'; i := i + 1; -- 第一表
    vTable(i).hira := 'ら'; vTable(i).roman := 'ra'; i := i + 1; -- 第一表
    vTable(i).hira := 'り'; vTable(i).roman := 'ri'; i := i + 1; -- 第一表
    vTable(i).hira := 'る'; vTable(i).roman := 'ru'; i := i + 1; -- 第一表
    vTable(i).hira := 'れ'; vTable(i).roman := 're'; i := i + 1; -- 第一表
    vTable(i).hira := 'ろ'; vTable(i).roman := 'ro'; i := i + 1; -- 第一表
    vTable(i).hira := 'わ'; vTable(i).roman := 'wa'; i := i + 1; -- 第一表
    vTable(i).hira := 'を'; vTable(i).roman := 'wo'; i := i + 1; -- 第二表
  END;
BEGIN
  INIT;
  REP := HIRA;
  FOR i in vTable.FIRST .. vTable.LAST LOOP
    REP := REPLACE(REP, vTable(i).hira, vTable(i).roman);
  END LOOP;

  -- その他の変換ルール
  -- yと母音(aeiou)が続く「ん」は、「n'」と続くyまたは母音(aeiou)に変換
  REP := REGEXP_REPLACE(REP,'ん([yaeiou])','n''\1');
  -- その他の「ん」は「n」に変換
  REP := REPLACE(REP,'ん','n');
  -- 「っ」は、続く子音の文字を重ねるよう変換
  REP := REGEXP_REPLACE(REP,'っ(.)','\1\1');
  RETURN REP;
END;
/

DMBOK2概説セミナー

 現在ぼくは、データマネージメント協会日本支部(DAMA Japan Chapter(略称 DAMA-J))という組織の会員です。そちらから「DMBOK2 概説セミナー」のお知らせが送られてまいりましたので、聞いてきました。ちなみにDAMA-Jというのは、国際データマネージメント協会(Data Management Association International(略称 DAMA-I)) の日本支部で、データ管理を実践する国際的な非営利団体で、データマネージメントを普及するために活動しています。

 ここでDMBOK2といっているのは、データマネージメント知識体系ガイド 第二版(DATA MANAGEMENT BODY OF KNOWLEDGE SECOND EDITION)のことで、DAMA-Iから出版された書籍の日本語訳本のことです。2018年12月にDAMA-J会員有志の方々によって翻訳されました。ぼくは会員になって日が浅くて、翻訳にも参加していないし、内容も軽くしか理解していません。会員の方の会話についていくのがやっと、という状況なので、今回のセミナーは、ぼくのような書籍の内容が難しくてよく分かりません、という人たちはとってもありがたいものでした。
 セミナーは、

  • データマネジメント概説(15分)
  • DMBOK2概説(45分)
  • DMBOK2第1章概説(45分)

という構成になっていて、終了後にフリーディスカッション(懇親会)という感じでした。すべてをここに記載するわけにはいかないので、現時点で受け取れた、ぼくなりのデータマネージメントのまとめを記載しておきます。

データマネジメントのまとめ

  • データとは
    • 日常業務を記録する
    • 企業にとって重要な資産(ただし、積極的に管理している組織はほとんどない)
    • データが集まることで(データ→インフォメーション→ナレッジ→ウィズダム)
      • 意思決定の基になる
      • 知恵を創出する基になる
  • データマネジメントについて
     データマネジメントは、データを資産として考え、その価値を高めるために実施されます。それぞれのデータに存在するライフサイクルについて維持管理するための計画や手順を決めることや、それらを実施することもデータマネジメントに含まれます。より詳細な内容は書籍にゆだねるとして、キーワードとしては以下のようなものがありました。
    • データの資産価値を高めるために行う
      • 正確さ、完全性、新しさ、整合性、アクセスしやすさ、セキュアなど
      • 信頼性の高い高品質なデータにより → 優れた意思決定が可能になる
    • ITの発展により、その重要性が増してきている
      • IT活用範囲とデータ活用範囲は異なっている
    • データの価値
      • 物理的なものではなく、金銭的価値を与えるのが困難
      • 評価基準がなく価値を定めるのが難しい
      • 品質の低いデータは処理コストがかかり、ビジネス戦略に悪影響を及ぼす
    • より高品質なデータを目指す
      • 計画
      • アーキテクチャ
      • モデリング
      • 戦略的なアプローチ
    • メタデータ、データライフサイクル
      • 業務スキル
      • 高度なITスキル
      • 組織横断的で全社的な視点

 DMBOK2は、データマネージメントに関する知識について、ITのツールだけでなく、人や組織、プロセス面からも検討された導入書になっています。もし興味を持たれた方は、ぜひ一緒にDAMA-Jで学びましょう。

Googleさまからお電話が!

Google Cloud Platformを始めてちょうど2か月ほど経ったところ、Google Cloudさまからお電話をいただきました。ぼくはちょうど不在だったということで、「 【GCP無料トライアル】ご登録ありがとうございました 」というタイトルでメールをいただきました。クレジットカードによる決済方法も登録してあったので、無料トライアル中だとは思っていなかったのですけど、そうなのですね。

その後、電話がつながったので、「こんなところに問題があって、こんな風に利用したいと思っています。」と、お伝えしたところ、提案させてほしい、ということに。ま、営業活動でやっていることでしょうから、当然の流れですよね。本来はGCPを学んで検証の終わったぼくが、こんな風に構築したいと思っています、と、お客様に提案しようと思っていたので、これからどんな流れで仕事が進むのか、ちょっと不安な気持ちになりました。でも、いろいろとより早く、より便利になるならそこには目をつぶりましょう。

ぼくは競合に負けないように、GCPの使い方についていろいろと検証しないといけませんね。ということで、先日入門トレーニングで教えてもらった、QWIKLABSのクエストにチャレンジしてみます。QWIKLABSはGCPを学べるオンライン学習プラットフォームです。最初のクエストはなぜか英語ですが「GCP Essentials」です。
さあ、がんばるぞ~!

Google Cloud Platform 入門編トレーニングに参加してまいりました!

 先日、行ってまいります、と言っていたGoogle Cloud Platform入門編トレーニングに行ってまいりました。ただ、トレーニングとは言っていましたが、実際の練習はありませんでした。ま、時間の都合だったようです。トレーニングするのだからと、そんなに大人数がいることは想定していなかったのですけど、すごい人でした!
 休憩中に一番後ろから写真撮ってみました。休憩中なので空席が見えますが、これがほぼ満席状態でした!

Google Cloud Platform 入門編トレーニング会場 休憩中の様子
2019年2月20日 Google Cloud Platform 入門編トレーニング

 書店に置いてあったGoogle Cloud Platform関連書籍の数から、まだそんなに認知されていないと思っていたのですけど、これはスゴイですね。圧倒されました。

 さて、肝心のセミナー内容ですが、概要がバッチリ理解できました。概ね書籍に書いてあったことではあったのですけど、実際にデモンストレーションを見せてもらい、事例紹介してもらうことで、より理解が深まりました。
 もともとのGCPのコンセプトは、Googleのソフトウエアエンジニアが使っている開発環境を一般のデベロッパーにもパブリッククラウドとして利用できるように、というものだそうです。とにかく何十億人ものユーザーが利用できるサービスを提供しているので、自動的にスケールする、ということがとても魅力的ですね。ちなみに冒頭のあいさつにあった、残念ながらトイレはスケールしないのでお早めに、というGCPジョーク、会場は静まり返っておりましたが、ぼくはこっそりニヤリとしていましたよ。
 それで前々からそうじゃないかと思っていたけど今回明らかになったことは、GCPを利用すれば何もしなくても何でもかんでも自動的にスケールしてくれるんじゃないかという期待は、半分くらいはあっていたのだけれど、このページを提供しているCompute Engineでは勝手にはスケールしないということですね。必要ならLoad BalancingとKubertenes Engineを組み合わせればいいということでしたが、このページがバズって見れなくなることはきっとないでしょうから、ま、この構成で充分ですね。

 ぼくにとって今回の説明で特に印象的だったのは、BigQueryの説明で、これはデータウエアハウスのサービスなのですけど、実際にサンプルデータを使ってSQLを実行する画面を見せてもらいました。こういう環境があるなら、データをとにかく放り込んで、あとから分析する、ということも簡単にできそうだな、と思いました。あと、時間の都合で説明は割愛されたのですけど、DataflowというETLツールのようなものがあり、それを使うと入力データを分析しやすい形に変えることができる。そして、Data Portalというのを使ってデータの可視化ができそうだ、ということがわかったので、これらの組み合わせで現状のデータウェアハウスの代わりとして利用できそうだ、ということが分かりました。そこが特に今回の大きな収穫でした。
 Googleさん、そして、今回のスポンサー企業だった、トレノケートさん、NECマネジメントパートナーさん、トップゲートさん、クラウドエースさん、ありがとう!

SQLの学び方

 先日、職場の方から「石川さんは、どうやってSQL勉強したんですか?」と質問をいただきました。言われてあとから気づいたのですが、ちゃんとしたSQLの教育を受けたことって、ありませんでした。では、どうやって学んだのでしょうか。
 結論から言うと、Oracleのマニュアルです。Oracleのマニュアルは、膨大な量があって、どれを読んだらいいのか、本当に迷います。その中で、SQLを勉強しようとする方のためには、「SQLリファレンスマニュアル」これだけですね。今でもOracleさんのホームページで提供されていますので、本気で学びたい方は検索してみてください。最初は、この中の「SELECT」についての記述を読んでは試し、読んでは試し、してみてください。そのうちに何となくわかってくると思います。「SELECT」に慣れて余裕が出てきたころに、マニュアルの他の記載を見るのがよいでしょう。そこには、リテラルや値の種類、関数の種類などが書かれてあって、読めばより理解が深まって、SQLをもっと便利に使えるようになると思います。
 もし、もっと深く理解していきたいと思った人は、SQLが作られる元となった知識として「関係モデル」の「関係代数」を学ぶのがよいと思います。関係とはおおよそ表のようなものを表す概念のことで、関係代数は、それらの演算について述べられたものです。詳しくは、C.J.Dateさんによる「データベースシステム概論」を参照してください。関係代数の和、交わり、差、直積などについて詳しく記載されていて、関係というか、表というか、セットというか、そういう概念の演算について深く理解できるようになります。

 ぼくがSQLを初めて使ったのは、おそらくOracle6の時代で、とても衝撃的だったのを覚えています。当時はデータベースというものの存在も知らず、データはすべてファイルに書かれているのが当たり前で、システムごとプログラムごとにファイル定義を作り、そのルールに従ってファイルオープンし、読み書きして利用するのが当たり前だと思っていたからです。当時はSQLでデータを取得する仕組みが全く理解できず、とにかくこうやればデータが取れる、という利用方法でした。データベースが現在のように利用されるようになるとは夢にも思っていませんでした。
 Oracle7になって、本格的にOracleを使うようになったのですが、当時はまだインターネットもそんなに普及しておらず、すべて紙のマニュアルだよりでしたね。わからないことはすべて、マニュアルを読んで試してみる、ということしかできなかった、というわけです。
 当時のOracleを使っている人たちの間では、今よりももっとたくさん色々なパフォーマンス上の問題があって、ぼくにはそういう問題を解決する機会も多かったように思います(今でもそういう問題って起きているのかな?)。そうそう、SQLをすんなりと書けるようになったら、次に、パフォーマンスの問題が待っていました。そんな書き方したら、Oracleちゃんは、うまく動いてくれないよ~、というヤツですね。チューニングに関するSQLについては、また、別の機会に書きたいと思います。

Google Cloud Platform 入門編トレーニング

SHOEISHA iD News号外で案内が送られてきたので、 2019年2月20日(水)に、Google Cloud Platform入門編トレーニングに参加することにしました。

会社を始めることが決まったときに、以前からやろうと思っていたけどできていなかった情報発信をしていこうと思い、そのためのインフラとして、WordPressを使うことを決めました。
さらに、会社としてできそうなことを何か始めようと思って、Google Cloud Platform(GCP)を利用していくことに決めました(ずいぶんと今更だよねぇ )。
当然、このサイトもGCPであっという間(?)に作りました。

これまでデータベースを中心にした業務アプリケーション開発にかかわることが多かったので、業務分析やデータモデリング、アプリケーション開発、パフォーマンスチューニングなどは、申し分なく得意分野だと言い切れるまでになりました。
しかし、業務において発生する問題について、その解決策として何が提供できるの、となったときにすぐに提供できるものがない、ということがこれまではすごくジレンマでした。
インフラまわりが弱くて、業務サービスを単体で提供することができなかったのです。

そんなこともあり、これからはGCPがその助けになると信じて取り組むことにしたのでした。作りたいものさえ分かっていれば、かなりの短期間でサービス提供できるようになるという可能性はとても魅力的です。

そして、ちょうど勉強を始めたタイミングで入門編の案内がきたので、「これだ!」と即申し込みました。

現状のデータをいろいろと分析するために、データウエアハウスの代わりとしてGCPを利用することができそうだ、というところまではたどり着いていたのですけど、実際にどんな手段をつかって実現していくのか、そのストーリーがなかなか見えてこないので、今回のセミナーで確認してみたいと思っています。

Google Cloud Platformエンタープライズ設計ガイド

初出勤

今日は新しい会社としては、初出勤の日でした。ありがたいことに、その日のうちに取引先の方々からお祝いの宴を設けていただきました。本当に感謝です。これからも、もっとよいお仕事でお返ししていきたいと思います。

そして、その宴にぼくの会社のロゴの素案を持ってきてくださっていました。ぼくがロゴなんて考えていないということが完全にバレていてちょっとだけ恥ずかしかったけど、とてもうれしかったです。第二案も検討中とのことでしたので、このロゴか、まだ見ぬ案のどちらかで、まずは名刺を作らせてもらいたいな、と、思いました。

会社始めました。

色々あって、会社を始めることになりましたので、Google Computing PlatformのWordPressでホームページを立ち上げました。

ちょっとずつ更新していきたいと思います。