信頼はずっと、挑戦はもっと。

お問い合わせ
TEL:03-3496-3888

BLOG コアテックの社員ブログ (毎週月曜~金曜更新中)

LIST OF ARTICLES

記事一覧

  • テクログ

    データベースに関するTips

    どうも、もう少しで50歳(半世紀)になる大西です。開発に携わっていると同じ結果を導くにあたり多くの手法が存在する事に気付くだろう。1つしか手法を知らず後になって損をしていた事に気付く・・・そのような経験も多いのではないだろうか。データベースについては30年以上前から今だに「そのような手法があるのか」と感心する事が多々ある。今回はデータベースの中でも MySQL に関しての「その方法でも出来るね」について記そう。■ TIMESTAMP および DATETIME の自動初期化および更新機能さて、まずはこれだ。最近でもカラムとして登録日時と最終更新日時を持たせている設計を多く見かける。きちんとシステム上必要なのであれば良いのだが「とりあえず入れとけ」は止めて頂きたいと常に思っているカラム達だ。このカラムが存在するにも関わらず無視しているプログラムは論外として、INSERT 時に「登録日時」と「最終更新日時」を、UPDATE 時に「最終更新日時」を、それぞれ NOW() を使用して値をセットするプログラムを多く見かけるのだが、経験上データベース側の日時値ではなくプログラム側の日時値でお願いしたい(プログラム側で日時データを作りその値をデータベースに適用するようにして欲しいのだ)。特に MySQL の日時については Ver8.0 になっても 2038年問題は残ったままのようだしプログラム側の日時値でお願いしたいものだ。何はともかくこれら私の希望を一旦棚の上に置くとして、登録日時と最終更新日時カラムが単にそのレコードの登録/更新の日時を表すだけならば NOW() を使うのは避けるべきだと述べておく。ではどうするのか。それは INSERT の時は登録日時と最終更新日時を、UPDATE の時は最終更新日時だけを自動でセットするようにすれば良い。テーブルを見てみよう。Create Table: CREATE TABLE `TBL_TEST` (     `key` varchar(32) NOT NULL,     `value` text NOT NULL,     `update_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,     `create_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,     PRIMARY KEY (`key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 update_at カラムはデフォルト値として CURRENT_TIMESTAMP を、そして ON UPDATE CURRENT_TIMESTAMP で更新時はその時の日時をセットするカラムにしている。create_at カラムは update_at と同様だが更新時には反応しないカラムにしている。INSERT してみる。mysql> INSERT INTO `TBL_TEST` (`key`,`value`) VALUES ('test','hoge'); mysql> select * from `TBL_TEST`; +------+-------+---------------------+---------------------+ | key  | value | update_at           | create_at           | +------+-------+---------------------+---------------------+ | test | hoge  | 2018-01-13 02:01:04 | 2018-01-13 02:01:04 | +------+-------+---------------------+---------------------+ update_at、create_at 共に自動セットされている。UPDATE してみる。mysql> UPDATE `TBL_TEST` SET value='fuga' WHERE `key`='test'; mysql> SELECT * FROM TBL_TEST; +------+-------+---------------------+---------------------+ | key  | value | update_at           | create_at           | +------+-------+---------------------+---------------------+ | test | fuga  | 2018-01-13 02:01:38 | 2018-01-13 02:01:04 | +------+-------+---------------------+---------------------+ update_at のみ自動セットされている。最近はデータベース等のレコード結果を KVS などにキャッシュし高速化を図る手法も多く見かける。その場合も NOW() は避けよう(繰り返すが本心はプログラム側で生成した日時値をセットして欲しい)。何にせよ SQL もスッキリするしこちらの方がエレガントなので是非とも検討/実践して欲しい。■ SQL_CALC_FOUND_ROWS次はちょっとした Tips のようなものだ。検索結果などを表示する場合にはページングというテクニックを使用する場合があると思う。その場合ページングのため(結局何ページ分必要なのかを先に知る必要があるため)総レコード数を知る必要がある。この際に同じ WHERE句 で SELECT と COUNT(*) を発行して1ページ分のレコードと総レコード数を取得するプログラムを多く見かける。このような場合は SQL_CALC_FOUND_ROWS と FOUND_ROWS() を使うと良いだろう。mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE `hoge`>100 LIMIT 10; mysql> SELECT FOUND_ROWS(); 最初の SELECT で条件に合致するデータセット(1ページ分)が取得出来て、次の SELECT で条件に合致する(OFFSET / LIMIT 無関係の)レコード総数が取得可能だ。SELECT を2回発行する事に変わりはないのだが、こちらの方がエレガントであろう。今回は案件でも多用しているであろう MySQL についてその Tips 的な事柄を書いてみた。この他にも MySQL には寿司ビール問題やハハパパ/アルファベットの大文字小文字問題といったキャラセット/コレーションに関する問題もある(これらの問題について知らないというエンジニアは今すぐ調べて欲しい)。MySQL もこれら問題に対応すべくデフォルトの設定を見直すなど出来るところから対応してくれている。プログラムやシステム、ミドルウェアのデフォルト設定などが「そうなっている」のには必ず理由があるものだ。その理由を知るだけでもスキルアップに繋がると思う。手元を見返し「そうなっている」理由を是非とも考えて欲しい。それではまた。
  • レビュー

    コンテンツマーケ~オタ向けコンテンツYOチェケラッチョ~

    前回記事が真面目すぎると批判をくらうというよくわからない誹謗中傷により今回はアレな記事です。でも内容は真面目です。コンテンツマーケティングはこれまでも散々取り組んできて今もPでやったりしているんですが、まあ大事なわけです。世にある商品はすべてこれに該当しているわけです。で、まあ今回はアレでいくので、所謂オタ向けっていう角度からせめてみたいと思います。仕事柄あらゆる業界ウォッチはずっとし続けているのですが、2年前にうまれて「よく出来てんなー」と感心したコンテンツがコレ。ヒプノシスマイクまあぶっちゃけちょこっとかかわっています。・ターゲット・成長目標・戦略スケジュール・マネタイズ・プロモーションと練りに練られています。オホホ。女性向けコンテンツとしては勢いって意味では一番で(エッヘン)、2019年は怒涛の戦略年なので注目しておいて損はないです。もちろんコンテンツとしてもよくできています。所謂オタ向けとしては『ラップ』という要素を入れているので万人向けではありません。事実NGな人も結構な数いるので、何かある度炎上しているコンテンツではあります。ただこの炎上もコンテンツとしてみれば…?なわけで、まあ想定内なわけで。あんま私が書くとアレなんで詳細知りたかったら個別でもいいので連絡ください。最初の一手で仕掛け、食い合いをし、勝者が万人の知るコンテンツとして育つ。これはどの業界でも同じです。ものづくりをしている人はよくご存じだと思いますが、良質なものがそのまま評価されるとは限りません。そもそも評価されるために必要なステップがある。自己満足でいいならそれでいいですし、それを貫くのもひとつの手法です。何も間違っていません。ビジネスとして評価のフィードに上がるならやるべき必要なことがあり、それをひとつひとつすべてで成功・達成させる必要があるわけです。それをやるのが私の生業なので、15年やってきてれば現場として成功も失敗も体験しています。おっと真面目になってしまった。えーっと、このコンテンツのキャラで私が好きなのは私がチャットワークアイコンにしているチームのリーダーです(まわりくどい)。「顔がかっこよくてスタイルがよくて頭が超絶よくて腹筋割れてて喧嘩が強くて口が悪くて性格が悪い」っていうのが私の幼少期から一貫している異性のタイプでブレたことないですが(何事も決めたらトコトンタイプ)、まあこれに結構当てはまっているキャラですね。結婚願望ないけど結婚してえ~。いややっぱ結婚とか絶対ムリなんで行きつけのクラブのママポジションになりてえ~。
  • テクログ

    初めてGASを使った時にハマった話

    こんにちは。今回は冬休み中に初めてGAS(Google Apps Script)を使った時に、少しハマった話を書きます。やりたいことは「スプレッドシートの中の特定シートを取得」だったのですが、最初は以下のコードを書いていて、うまく取得できませんでした。var sheet_Daily_facebook_install_KPI_2018 = SpreadsheetApp.getActive().getSheetByName("Daily_Facebook_Install_KPI_2018"); 調べてみたところGASには「Container Bound Script」(スプレッドシートに紐づくもの)と「Standalone Script」(ドライブ上に単独で存在するもの)があって、私の場合、「Standalone Script」でコードを書いていたので、ドライブ内の使用するスプレッドシートのIDを指定しないとダメでした。var sheet_Daily_facebook_install_KPI = SpreadsheetApp.openById('hogehogehoge…'); var Install_2018 = sheet_Daily_facebook_install_KPI.getSheetByName('Daily_Facebook_Install_KPI_2018'); 上記に変更したところシートを取得することができました。初歩的なミスなので、よくGASを使う人には当たり前かもしれません(;^_^A アセアセ・・・勉強しないとなー。では、ヨネでした!【参考文献】http://d.hatena.ne.jp/aityaso/20131026/1382768321異なるスプレッドシートからセルをコピーする
  • レビュー

    プログラミング問題を練習できるおすすめサイト

    こんにちは、kaiです。最近、社内でプログラミング能力を試すということでプログラミングの問題を解く機会があり、学生時代に利用していたサイトがかなり練習になったので今回はそういったプログラミング問題を練習できるおすすめサイトを紹介したいと思います!まずはPaizaというサイトです。https://paiza.jp/ここはエンジニアのための就職サイトになっていますが、問題を解いた難易度に応じてランク分けされ、ランクを上げていくと面談できる企業が増える仕組みになっています。もちろん問題を解くためだけにも利用でき、問題も随時追加されているので初めてプログラミング問題を解く方には特におすすめです。次に紹介するのはAOJ(AIZU ONLINE JUDGE)です。http://judge.u-aizu.ac.jp/onlinejudge/こちらは会津大学が運営しているサイトになっており、競技用プログラミング大会に出されているような問題を解くことができます。競技用なのでアルゴリズムなどの理解がないと全部解くのは難しいと思いますが、初心者コースの「Introduction to Programming I」などはそういった知識がなくとも解けるのでおすすめです。慣れてきたらアルゴリズムも勉強していくのもいいですね!いかがだったでしょうか?いずれのサイトもオンライン上で問題を解いて結果を確認できるので手軽にたくさんの問題に挑戦できます。こういった問題に慣れていき、アルゴリズムへの理解や効率の良い処理の書き方を覚えていくと業務でも役に立つと思うので、ぜひ挑戦してみてください!
  • 旅行

    あけましておめでとうございます

    あけましておめでとうございます。でらです。今年もよろしくお願いします。年末年始はいかがお過ごしでしたか?私は実家に帰りました。帰省する日にちょうど年末寒波が襲来し、地元の方も雪が積もってました。とても寒かったです。地元と比べると本当に東京は暖かくて快適ですね。1月1日におせち食べました。美味しかったです。今年も良い一年になりますように。では。
  • 旅行

    はいさい竹富島

    こんにちはよっこです!このあいだの連休中に沖縄に行ってきました。沖縄といっても今回は本島ではなく石垣島、西表島、由布島、竹富島を周って観光しました!どの島もそれぞれよかったのですが、その中でも竹富島は是非みなさんにオススメしたいです!島自体それほど大きくなく、自転車を借りれば2,3時間ほどで周って観光できるほどです。ただ竹富島を周ってみると、石垣や赤瓦の屋根の家、ハイビスカスなどいろんなところで沖縄の雰囲気を感じることができます!上の写真は竹富島の人気スポットの一つであるカイジ浜ですここでは砂浜の砂をすくうと星の砂を見つけることができるところで自分も汗をかきながら探してみましたが見つけられませんでした…ほかにも水牛車に乗って観光できたり、晴れれば夜にはたくさんの星が見れたり見所たくさんの竹富島にみなさんも是非行ってみてください!