Let’s EncryptでSSL証明書の発行 2016年7月14日

ネットスクエアの永田です。

最近気になっていた「Let’s Encrypt」を試しにさわってみました。

Let’s Encryptとは?

Let’s Encrypt 総合ポータル」から引用させてもらいます。

Let’s Encrypt は、認証局(CA)として「SSL/TLSサーバ証明書」を無料で発行するとともに、証明書の発行・インストール・更新のプロセスを自動化することにより、TLS や HTTPS(TLSプロトコルによって提供されるセキュアな接続の上でのHTTP通信)を普及させることを目的としているプロジェクトです。

一般的にはSSL証明書の発行は「有料で、発行・更新のたびに作業が必要」なのですが、
Let’s Encryptではそれらを解消するべく「無料で、発行・更新プロセスの自動化ができる」という
素晴らしいプロジェクトです。

SSL証明書の発行

SSL証明書の発行に使用した環境はCentOS 5系とちょっと古めなOSだったため、
Let’s Encryptの公式クライアントが対応していなかったので、
letsencrypt.shという非公式クライアントを使用しました。

詳細な手順などはこの記事では省略しますが、下記のような作業をしました。

  • 証明書を発行したいドメインのWebサーバのドキュメントルート以下に/.well-known/acme-challengeといったお決まりのディレクトリを用意
  • ドメインを指定してletsencrypt.shを実行して証明書を発行
  • 発行された証明書などがサーバーに保存されるので、Webサーバの設定ファイルにSSL設定を追加
  • Let’s Encryptが発行する証明書の有効期間は90日間なので、期間切れが近づいたら自動更新するようcronに設定を追加

結果

SSL証明書を設置したサイトに、ブラウザからhttps://~でアクセスしたところ、
Let’s Encryptが発行した証明書がちゃんと使用されていました!

ちなみにLet’s Encryptが発行できる証明書はドメイン認証型のみで、
組織の実在性を証明する企業認証型やEV型といったタイプは発行できません。

昨今では“常時SSL化”といったキーワードも出てきているので、
用途にあわせてLet’s Encryptをうまく使っていきたいですね。

「LBI サロン@広島」第87回「WEB TOUCH MEETING」共催 に参加してきました 2016年2月22日

ネットスクエアの永田です。

先週2/20(土)に開催された
「LBI サロン@広島」第87回「WEB TOUCH MEETING」共催
に参加してきました。

今回参加した一番のお目当ては『ざっくりわかるEC-CUBE3』というセッションで、
昨年リリースされたEC-CUBE3について開発元の株式会社ロックオンの足立さんから紹介していただけました。

EC-CUBE3のキーワードとしては

  • Silexフレームワークを採用
  • ORマッパーにはDoctrineを採用
  • PSR(PHPのコーディング規約)に準拠した開発
  • レスポンシブWebデザインを採用
  • 開発リポジトリはGitHubへ移行
  • Travis CIやAppVeyorなどの外部サービスを使いCI環境を構築

などがあり、バージョン2系のころと比べると随分とモダンなPHPプロダクトへと様変わりしていました。
ただ、現在鋭意開発中という感じも伝わってきたので
品質面が安定するまでは実際の案件に採用するのはもう少し様子見かな、というのが正直な感想です。

その他、株式会社システムフレンドのインフラ担当の藪兼さんの『ECサイトの裏方さんのお仕事』というセッションは、
インフラ担当の大変さとやりがいが伝わってくる内容で、
運営者/開発者/インフラ担当の協力が必要という点に共感しました。

次回のWEB TOUCH MEETING
Google Cloud Platform ユーザーグループ広島とのコラボでGoogle Japanの方が広島に来られて
最近話題のTensorFlowやCloud Vision API等の紹介をしてくれるそうです。

機械学習やディープラーニングといった分野の知識を全く持ち合わせていませんが、
興味があるので参加して勉強させてもらおうと思います。

書籍「さよなら、インタフェース」 2016年1月18日

ネットスクエアの永田です。

最近「さよなら、インタフェース」という書籍を読みました。

システム開発の現場では、
ユーザーが抱える課題に対して「画面(インタフェース)を用意して解決する」というのはとても自然な流れですが、
本書では盲目的に画面を用意することに異を唱え、
「ベストなインタフェースはノー・インタフェース」というコンセプトを提唱しています。

本書内では色々な事例が紹介されていますが、
特に印象的だったのは「車のドアロックを簡単に解除する」という課題に対する事例です。

この課題を解決するため、ある自動車メーカーはスマートフォンアプリを用意したのですが、
ドアロックを解除するにはスマートフォンを取り出してアプリを立ち上げてといった操作に13もの手順が必要で、
鍵を使った従来の方法より便利になっているとは言い難いものでした。

一方、別の自動車メーカーが採用した解決法は、
クレジットカードサイズの装置を胸ポケットや財布に入れておけば、
「車の所にいく」と「ドアを握って開ける」のたった2つの手順でドアロックが解除されるという
「ノー・インタフェース」な方法でした。

この事例のように「まず画面ありき」の考えにとらわれずに、「ノー・インタフェース」な方法を実現するためには

  • 画面に頼らず、解決したい問題につきものの「いつもの手順」を理解する
  • ユーザーに情報を入力させるのではなく、マシンが情報を自動的に収集し、ユーザーの文脈にあわせて必要なモノを提供する

といったことが大事であると著者は語っています。

画面のあるWebアプリケーションばかりを作成している自分にとっては、新しい視点を与えてくれる一冊でした。

ダミーデータの作り方 画像ファイル編 2015年12月18日

ネットスクエアの永田です。

今回はダミー画像を準備する方法の紹介です。

Webシステムを開発していると、
画像ファイルのアップロード⇒加工⇒表示といった一連の機能が必要となるケースがよくあります。

そういった時に色々なサイズの画像での確認が必要ですが、私はよくPlacehold.jpというサイトで画像ファイルを調達します。

このサイトでは画像の縦横サイズを指定して↓のような画像を作成することができます。

初期設定では画像サイズを表した文字が埋め込まれますが、↓のように任意のテキストへの変更や背景色の変更なども可能です。

以下のようにcurlコマンドを使えば必要なサイズの画像を一括で準備することも可能です。

curl -O ‘https://placehold.jp/{100,150,300}x{80,160,240}.png’

※とはいえ、過剰なアクセスは利用規約で禁止されているので、そこは注意が必要です

 以上、今回はダミー画像の作り方を紹介させてもらいました。
早くもネタが尽きてきたので、 ダミーデータの作り方シリーズについては今回でいったん終了したいと思います。

 

ダミーデータの作り方 スケジュールデータ編 2015年12月4日

ネットスクエアの永田です。

今回はスケジュールのダミーデータを一括作成する方法についての紹介です。

ここでの「スケジュール」とは、「 開始日時と終了日時を持ち、特定のユーザに属する情報 」という定義にします。
グループウェアのスケジュール情報や、予約管理システムにおける予約情報などを思い浮かべてもらえたらと思います。

[前提条件]

使用するデータベース/テーブル、作成するスケジュールの内容については下記の通りとします。

  • データベースはPostgreSQL 9.4
  • ユーザ(users)とスケジュール(schedules)の各テーブルのレイアウトは以下の通り
    create table users (
        user_id serial not null         -- ユーザーID
      , name character varying(30)      -- 名
      , constraint users_pk primary key (user_id)
    );
    create table schedules (
        schedule_id serial not null     -- スケジュールID
      , user_id integer not null        -- ユーザーID
      , start_date timestamp not null   -- 開始日時
      , end_date timestamp not null     -- 終了日時
      , constraint schedules_pk primary key (schedule_id)
    );
  • ユーザのデータは以下の3件を用意
    INSERT INTO users(name) VALUES('前田');
    INSERT INTO users(name) VALUES('大瀬良');
    INSERT INTO users(name) VALUES('ジョンソン');
  • スケジュールの作成対象期間は2015/12/1~2015/12/31で、各日9時から18時までの範囲で30分間隔に敷き詰めるように作成
  • スケジュールは全ユーザに対して作成

[作成方法]

データの作成にはPL/pgSQLを利用し、コードの実行についてはWindows環境のpgAdmin IIIを使用します。

データ作成を行うコードは下記になります。

DO $$
DECLARE
  d   DATE;       -- 日付
  t   TIMESTAMP;  -- 時刻
  u   RECORD;     -- ユーザのレコード
BEGIN
 -- ① 12/1から12/31まで1日ごとのループ
 FOR d IN SELECT generate_series('2015-12-01'::DATE, '2015-12-31'::DATE, '1 day') AS d LOOP 
   -- ② 9時から17時半まで30分ごとのループ
   FOR t IN SELECT generate_series(d + interval '9 hour', d + interval '17 hour 30 minute', '30 minute') AS t LOOP
     -- ③ ユーザ1人ごとのループ
     FOR u IN SELECT * FROM users ORDER BY user_id LOOP
       -- ④ INSERT文の実行
       EXECUTE 'INSERT INTO schedules (user_id, start_date, end_date) VALUES (' || u.user_id || ',''' || t || ''', ''' || t + interval '30 minute' || ''')';
     END LOOP;
   END LOOP;
 END LOOP;
END$$ language plpgsql;


上記のコードを簡単に解説すると、
①でgenerate_series関数で12/1から12/31までのレコードを作成してループ、
②でgenerate_series関数とintervalを使用して各日の9時から17時半までのレコードを作成してループ、
③で全ユーザを取得してループ、
④で開始時刻は②の時刻にして終了時刻は②の時刻の30分後にしたスケジュールデータをINSERT
ということをやっています。

 このコードの実行で1674件(31日 × 9時間 × 2分割 × 3人)のスケジュールデータが作成できます。

上記のコードでは隙間なく敷き詰めるようにデータを作成しましたが、IF文を追加することで
①のループで土日はスキップさせたり、②のループで昼休みの時間についてはスキップさせたり、
random関数を使って閾値未満の場合はスキップして作成間隔をまばらにさせたり、
といったコントロールができるかと思います。

以上、今回はスケジュールデータを題材にしましたが、
PL/pgSQLを使うと手続き処理ができるので、他のデータの作成にも応用できると思います。
ぜひ色々と試してみてください。

ダミーデータの作り方 個人情報編(その2) 2015年11月10日

ネットスクエアの永田です。

前回の続きとして、
なんちゃって個人情報」で生成したCSVをデータベースに取り込む方法の紹介です。
前提として、データベースはPostgreSQL 9.4を使用することとします。

生成したCSVの項目がテーブルの列と一致していれば、
COPYコマンドを使ってそのまま取り込むことが出来ます。

ただ、値に何らかの加工が必要となるケースが多いので、
今回はExcelを使って値を加工してINSERT文を生成する方法を紹介します。

「なんちゃって個人情報」で生成される「名前」は、
姓と名を空白区切りで結合した1つの項目となっているのですが、
姓と名が別々の列となっているテーブルに取り込みたい、というケースを例に今回は説明します。

CSVとテーブルについては以下のものを使用します。

  • CSVは「なんちゃって個人情報」で「名前」と「性別」のみを選択して生成
  • テーブルのレイアウトは以下の通り
    create table users (
        user_id integer not null            -- ユーザーID
      , last_name character varying(30)     -- 姓
      , first_name character varying(30)    -- 名
      , gender character varying(1)         -- 性別
      , constraint users_pk primary key (user_id)
    );

まず、CSVをExcelで開きます。

先頭に1列追加し、ユーザーID用の連番を振ります。

姓と名のためのC列・D列の2列を追加し、空白区切りで名前を分割するようにそれぞれ
「=LEFT(B2,FIND(” “,B2)-1)」
「=MID(B2,FIND(” “,B2)+1,LEN(B2))」
といった式を埋めます。

あとはINSERT文を組み立てるため、
「=”INSERT INTO users VALUES (“&A2&”, ‘” & C2 & “‘, ‘” & D2 &”‘, ‘”&E2&”‘);”」
といった式をF列に埋めます。

これで出来上がったINSERT文をコピーして実行すれば、データベースへの取り込みが完了です。

色々とやり方はあると思いますが、
Excelの各種関数を使うとちょっと複雑な加工が必要となったときでも対応しやすいかなと個人的には思っています。

今回で個人情報編は終わりとし、次回は別のデータの作り方を紹介したいと思います。

2015年11月3日

ネットスクエアの志藤です。

遅ればせながら、
自分の作業PCをWindows10にアップグレードしました。

よく使うソフト、メーラーだったりオフィスだったりユーティリティソフトだったり、
普通に動いてくれています。マイクもスピーカーも問題なさそう。

まずは一安心。

ダミーデータの作り方 個人情報編(その1) 2015年10月16日

ネットスクエアの永田です。

今回から何度かに分けてダミーデータの作り方について、
ちょっと便利な方法を紹介していきたいと思います。

まずは個人情報編と銘打っていますが、
システム開発をしていると必ずと言っていいほどテスト用の個人情報が必要となります。
社内システムであれば社員であったり、ECサイトであれば購入者などですね。

名前を一律「ああああ」や「ほげほげ」などとして大量にデータを作ってもよいのですが、
ある程度は本物らしい名前であったり、データごとのばらつきが欲しいものです。

そんな時に使えるのが、ダミーの個人情報を生成してくれるサービスです。
似たようなサービスはいくつかあるのですが、
私がよく使っているのは「なんちゃって個人情報」というサービスです。

こちらのサービスは
名前/性別/誕生日/メールアドレス/電話番号などから出力したい項目が選択可能で、
最大5000件のダミーの個人情報を生成することができます。

出力フォーマットも
HTMLテーブル/XML/CSV/TSV(タブ区切り)から選択可能ですが、
私はだいたいCSVファイルで出力しています。

今回はここまでで、次回はこのサービスから出力したCSVファイルを
データベースに取り込む方法を紹介したいと思います。

金魚本読書会 (JPA編)に参加 2015年10月15日

ネットスクエアの志藤です。

先日(10/10)、金魚本読書会 (JPA編)に参加してきました。
DoorKeeperはこちら
Facebookはこちら

JPA(Java Persistence API)の話が中心でした。
最近はソースコードを書いていないので、
久しぶりにソースをじっくり見ました。

SlideShareに要点をまとめてあったので、内容は理解しやすかったです。
SlideShareはこちら

若かりしころはSQLをガリガリ書いていた自分としては、
「アノテーションやらをここまで書くぐらいなら素直にSQL書けばいいのに」
と思いましたが、時代の流れはこうなんでしょうねぇ。

オープンソースカンファレンス2015 Hiroshima 2015年9月30日

ネットスクエアの志藤です。超久々の投稿です。

先日(9/19)、オープンソースカンファレンス2015 Hiroshimaに参加してきました。
オープンソースカンファレンス2015 Hiroshima のサイトはこちら

今回話を聞いたのは、以下の3コマ。
・最近のGoogle技術のリリースとFirebaseの紹介
・オープンソース&クロスプラットホームとなったASP.NET 5のご紹介
・baserCMSを使って考える「広告物」としての中小企業ホームページ
その中で一番興味をひかれたのは、最後のbaserCMSの話。
baserCMSのホームページ

WordPressとはじめ、CMSもたくさん種類があるけど、今頃なぜ?という疑問もあったんですが、 話を聞くと実にツボを押さえているソフトだなぁと思いました。
中小コーポレートサイトにちょうどいいというフレーズがぴったり。
ブログやメールフォームなど、コーポレートサイトに必要な機能が標準装備されているので、
テンプレートさえ決めればすぐに立ち上げれます。

広島で勉強会があったら参加したいなぁ。