読者です 読者をやめる 読者になる 読者になる

MySQLしかやったこと無い僕がPostgreSQLへのドアを叩いてみる。『bigint(20) ZeroFillオプションって何の為にあるの?』

PostgreSQLへの第一歩

まず、[PostgreSQL] について、何も知らないので知る所から。

Q: 『君の名は?』

A: 『PostgreSQL (ポストグレスキューエル)。 ポスグレとか呼ばれる。』


Q: 『誕生日は??』

A: 『1995-05-01 に Ver.0.0.1。 物心がついた(正式リリース日) のは、 1995-09-05 です。』


って事みたいです。

最初は Postgres95 って名前だったみたいです。

『Postgres95 』ってのが、 95年の 9/5 にリリースされた、って、数学科卒業者としては、非常に愛らしいです。 ポイント高いですね。

という事で、MySQLから、PostgreSQLへの扉を叩いてみようと思います。

これを通して、PostgreSQLの事を更に知りたいと思う事と、また、それぞれの違いから、MySQLについても知りたいです。

後は、うちの会社では、MySQLしか使った事無いんだけど、「なんで、MySQLなんだったんだろう」って思ったので、その辺も自分なりに、考えてみたいな。と。 (MySQLをセレクトした人はもう。。。)

実際から学ぼう

僕的には、Try and Error で学んでいくのが一番の近道かな、って思ったので、こんな事をしてみました。

『ORM 100% で書かれた MySQL用のプロジェクトがここにあるじゃろ?』

って事で、

『ORM 100% で書かれた MySQL用のプロジェクトをPostgreSQLで書き直してみよう』

って感じで進めてみたいと思います。

その上で、indexの使われ方とか、Migrationでのエラーとかでつまづきながら、学んでみようかな〜と。

初回のエラー: Migration。

Migrationファイル:

$this->table('hoges', ['id' => false, 'primary_key' => ['id']]);
     ->addColumn(
         'id', 'biginteger', [
             'identity' => true,
             'default'  => null,
             'limit'    => 20,
             'null'     => false,
         ]
     )
     ->addColumn(
         'piyo_id', 'biginteger', [
             'default'  => null,
             'limit'    => 20,
             'null'     => false,
         ]
     )
     ->create();

・・・ 例によって、フレームワークのプロジェクトなので、 ID_REQUIRED (とりあえずID) ですが。。。

これを実行してみました。

$ bin/cake migrations migrate

そうすると、以下、エラーが表示されました。

Syntax error: * near by ( , ERROR: piyo_id BIGINT -> ( <- 20) ~~
※ エラーメッセージはちょっと、ブログの都合上、色々変更してます。
(BIGINT(20) の 2の前の "(" に "^" がついてました。)

ほー。。

って事で、 以下、つぶやきをどうぞ。

・・・ なるほど、今まで、恥ずかしながら、思考停止で付けてました。
bigint(20) は 20桁までの数値データが保障されるbigint って思ってたけど、実は違うくて、

bigint(20) は 20桁に満たない場合は、20桁まで0埋めして、最低20桁の数値データを保持するbigint って感じでしょうか?

ていうか、そもそも、 1 が 0埋めで 00000000000000000001 と表示される時点で、 数値でも無い・・よね? 数字文字列よね?

疑問が一つ

これ、あって便利な理由が思いつかないんだけど、何があるんだろう?

僕の大好きな MySQL workbench は bigint(20) に格納された 10...01 と表示した事は無いし。。。

正直、無駄な0が多い分、ディスク容量も圧迫するんじゃ? とも思う。

Types in MySQL: BigInt(20) vs Int(20)

It's a hint for display width, it has nothing to do with storage. (表示幅のヒントで、ストレージとは、関係ありません。)

そもそも、ディスク容量、圧迫しない説。。。

うーん(´・ω・`)

って思って調べた所、こんな記述を見つけました。

MySQL公式リファレンス 11.1.1 数値型の概要

数値カラムに対して ZEROFILL を指定すると、MySQL は自動的にそのカラムに UNSIGNED 属性を追加します。

UNSIGNED属性とは??

整数型 http://www.dbonline.jp/mysql/type/index1.html

各カラムについては、 正の数と負の数を扱う事が出来るが、 UNSIGNED をつけると、正の数(0以上の数) しか格納出来なくなる。
その分、使える値の範囲は、2倍になる。 範囲を超えた値を入力しようとすると、エラーになります。

これ、今まで、思考停止で付けてたけど。。。やばいんじゃね?

ようは、マイナスを格納しない制約 とも取れる、って事だよね?

売上金額データとかをもしこの属性付いてたら。。。

まとめ

PostgreSQLには MySQLのbigint(20) などに見られる、 ZeroFillオプションは無い。
・ bigint(20)などでMySQLのカラムを作ると、自動で UNSIGNED オプションがつく。
・ UNSIGNED属性がつくと 正の数しか格納出来ない。

・ UNSIGNED属性を、思考停止で付けるとやばい。

2017/01/20 追記
但し、上記の設定は、ZERO FILL オプションを付けた時に初めて有効になる。

マジか・・・

Cloud9でCakePHP3の簡易インストラー Oven を使ってみた。

あなたの、お気に入りのフレームワークを1File, 1Clickでセットアップ

https://github.com/CakeDC/oven

Setup you favourite framework with 1 file and 1 click!

あなたの、お気に入りのフレームワークを1File, 1Clickでセットアップ との触れ込みで、リリースされました。

早速使ってみました。

Check On Cloud9

手っ取り早く確認するために、Cloud9を使用してみます。

ログインして、PHPの新しいworkspaceを作ります。

f:id:ikkitang1211:20170117134604p:plain

今回は、簡易として、oven-test というworkspaceを作成しました。

では、必要な、Oven.phpの準備をします。

先ほどの、https://github.com/CakeDC/oven に行って、Ovenをダウンロードします。

f:id:ikkitang1211:20170117134756p:plain

展開したのが下の感じです。 f:id:ikkitang1211:20170117134803p:plain

展開したら、oven.php をCloud9のルートディレクトリにアップしておきましょう。

それでは、Cloud9 で、 Run Project -> Share -> Application から、 URLを起動して、 oven.php を開きます。

そうすると、こんな感じの画面が出てきます。

f:id:ikkitang1211:20170117135030p:plain

The easiest way to install CakePHP. とあります。

なるほど。 easy English です。

では、真ん中のボタンを押します。

インストールが始まりました。

プログレスバーの変わりにCakeが積み上がっていきます。 粋ですね。

f:id:ikkitang1211:20170117135306p:plain

f:id:ikkitang1211:20170117135312p:plain

f:id:ikkitang1211:20170117135320p:plain

しばらく待っていると、

f:id:ikkitang1211:20170117135353p:plain

さくらんぼが乗って、インストールが完了しました。

Go To Your CakePHP APP をクリックします。

f:id:ikkitang1211:20170117135436p:plain

おおー。簡単に、CakePHP3の構成が完了しました。

まとめ

初回リリースって事で、まだ、色々とあるかと思います。

・ ルートディレクトリの下に、 app ってディレクトリが作られて、その中に、CakePHP3の環境が作られる。

ってのは、少し、衝撃的でした。

でも、Cloud9でWorkspaceを作って、インストールまで、本当に、ほぼClickだけで、コマンドは叩かずにインストールする事が出来ました。

公式でも、 get a working development environment と謳っている通り、「開発環境」を作るには、これほど、簡単に、環境が作成出来るツールは無いのでは?って位に簡単でした。

Bakeがはかどりますね。

ちょっと、雑なまとめですが、以上です!

岡山での勉強会にどっぷりつかった一年を振り返る

皆さま、こんばんは。

このエントリは、大都会岡山 Advent Calendar 2016 の 20日目の記事です。

前日は、 @razon さんの 合同勉強会 in 大都会岡山の5年間をふりかえるでした。

明日は、 @mu2in さんです。
最高のエントリを書いてくださるそうです。

さて、僕のエントリですが、今、これ書いてるの深夜一時だから、深夜のテンションでポエムするよ☆★

合同勉強会 in 大都会岡山 - 2016 Winter -

まずは、 先週の土曜日、合同勉強会 in 大都会岡山 -2016 Winter- に参加してきました。

企画・運営いつもありがとうございます。

さて、昨年の合同勉強会 in 大都会岡山 -2015 Winter-から、もう一年が経つんですね。

あの時は、上長に紹介をされて、会社の仕事の一環としての参加でした。

今思えば、参加して本当に良かったと思います。

ただ、ひたすらに憧れた

参加して、思ったのは、「なんだ、この面白い人達は・・」でした笑

これまで、IT勉強会って、あんまり行ったことも無かったですし、プログラミングは、お金をもらうための作業ぐらいにしか、思ってなかったのですが、その日見たのは、面白い異質のプログラムの話でした。

セッションが終わる度に、満足感がありましたし、次への期待感がありました。 もう、ピュアッピュアですね笑

でも、それぐらい、楽しい衝撃的な勉強会でした。

それと同時に凄く憧れました!

沢山の勉強会への参加

次の年には、本当に沢山の勉強会に参加させて頂きました。

また、iOSアプリ作成のもくもく会をお誘いによって、開催することもできましたし、オープンセミナー岡山 で、登壇のチャンスも頂けるなど、本当に色んなコミュニティに参加させて頂きました。

その辺の内容は以下記事をご参照ください。

岡山iOSアプリ開発もくもく会1年のあゆみ

オープンセミナー岡山2016でスピーカーとして登壇してきたよ(・∀・)

本当に楽しかった、あっという間の一年でした。

本当に色んな先輩方にお世話になった一年だな、と思います。

ボーナス

そんなこんなで、勉強会納めが合同勉強会 in 大都会岡山 -2016 Winter-でした。

今年も非常にワクワクでしたね。

その夜の忘年会議、私用で参加できなかったのですが、 そこで、大都会アワード 2016 を頂きました。

行ってたら、泣いてますね笑 最高の冬季ボーナスです。 本当にありがとうございます!

また、 アプリ道場アワード2016 こんな賞も頂きました。

嬉しすぎる冬季ボーナスです。

来季の展望

今年は、インプットばっかりだった年でした。 色んな先輩方から、得るものばかりでした。

来年は、しっかり勉強して、アウトプットしたいですし、もっともっと、成長していきたいですね。

目標は、来年の合同勉強会での登壇です。 まだまだ、どうしても自信が持てず。。。な感じなんですが、一年、しっかり勉強したいと思います。

って、事で、一年間ありがとうございました!

また、来年も一年、よろしくお願いします。

(何か、すっげー媚売ってる感やばいな。。w)

明日に期待

では、@mu2inさん、明日の大都会岡山 Advent Calendar 2016よろしくお願いします ^^