カテゴリー別アーカイブ: SOLUTION

  • @typeに中途採用(システムエンジニア)の募集を掲載しました。

  • 2018/07/10
  • Category:
  • 突然ですが、自分が本当にやりたいことや、逆にやりたくないこと、言えてますか?

    「これまでCだったけど、PHPの案件に携わりたい」
    「本当は上流じゃなくて、詳細設計以降を究めたい」
    など、何かしら希望があるかと思います。

    でも面接では印象などが気になってなかなか言えないですよね。

    当社では気にしません。どんどん言ってください。
    「やりたいこと」を叶えるのが私の仕事ですから。

    入社後も月に1回、全社員と面談しています。
    そこでやりたい仕事や現場での悩みをしっかり聞いて、
    参画するプロジェクトを選んでもらってます。

    例えば、最新技術に触れたいという社員は、
    Angular、Reactで開発するプロジェクトへアサインしたり。
    経験が浅くじっくり学びたいという社員は、
    プログラミング~テストのプロジェクトへアサインしたり。

    仕事以外のことでも、気になったことは何でも言ってください。
    例えば、給与。できる限り希望にお応えします。

    募集要項


    Web・オープン系、アプリを中心としたシステム開発をお任せします。(JAVA、PHP、angular、swift、React、Python、JavaScript、Ruby on Rails…etc)
    余裕を持ったスケジュールで、プライベートも大切にしながら働くことができます。

    【プロジェクト例】
    ■危機管理システム
    期間:1年
    フェーズ:要件定義⇒基本設計⇒実装⇒単体試験⇒結合テスト⇒(システムテスト)⇒納品⇒保守
    開発言語:Java(Microservices)、Angular
    フレームワーク:Spring
    データベース:MySQL
    サーバ環境:Linux

    など、他にも多数のプロジェクトがあります。

    ★将来的には、ゲームアプリなど自社開発サービスのプロジェクトに参画することも可能です!
    ★代表は新しいモノが好きで、新しいサービスや技術についても精通しており、エンジニアの目線を持って話すことができます。仕事の悩みや不安も、気軽に相談してください。

    面接希望の方は@typeまたはE-MAIL(info@cpr-inc.jp)にてお問い合わせください。
    面接日時は出来る限り希望に応じますので、お気軽にご相談ください。
    20時以降や土日の面接もご希望があれば、対応いたします。

    求人、転職サイトは@type

    ●株式会社CPR
    http://cpr-inc.jp/

Pocket

  • ユニットテスト、ブラウザテストのメリットデメリットとは

  • 2018/06/26
  • Category:
  • システム開発においてバグはないか、意図通りの動作を確認するテストは必須の工程となっています。
    テストというと、受け入れテストや単体テスト、結合テストといったプロジェクト管理寄りのテストを想像しがちですが、今記事ではエンジニア寄りのテストを整理してみたいと思います。

    エンジニア視線でのよくあるテスト


    エンジニア寄りのテストと言われて、どのようなテストが思い浮かぶでしょうか。
    よくあるテストとして、テストごとの操作を記述したものをエクセルに記述し、1つ1つ手作業で実施したことがある人がいるかもしれません。
    システムは人間が使うものである以上、UIに関わるテストなどは人間の手で行うことになるでしょう。

    一方で、ITエンジニアにとって重要な考えかたとして、自動化できるところは自動化すべきです。

    メソッド単位でのユニットテスト


    自動化できるテストのなかで、効果の高いものとしてユニットテストがあります。
    単体テストを英語に言い換えただけに見えるかもしれませんが、コーディングをする上でのユニットテストは異なる意味を持ちます。
    ここで言うユニットテストとは、メソッドごとにテストを実施するものであり、有名な言語ではユニットテスト用のライブラリがあると考えて差し支えありません。
    例としてrubyであればtestunit、PHPはPHPUnit、JavascriptはJasmineなどがあります。

    ユニットテストの特徴としては、テストの実行動作の負荷が軽く、気軽に実行できるというものです。
    一方でデメリットとしては、すでにあるシステムにテストを導入することが難しく、テストのためにシステムの一部を修正するといった場面もありえます。
    ユニットテストを導入する最良のタイミングは新規に開発を行うときでですが、Webフレームワークの仕組みにテスティングフレームワークがある場合は、途中からでも比較的テストコードを書きやすくなっているかと思います(興味のあるかたは検索してみましょう!)。

    実際に画面操作するブラウザテスト


    これはWebアプリケーションで使えるテストとなります。
    ブラウザの操作を自動化することで、省力化や変更をした際に何度でもテストを行うことができるようにする、というものです。
    Webアプリケーションの場合、同じテストをIEやchromeなど複数のブラウザで試すことが前提であり、この部分を自動化することで効果を見込むことができます。
    ツールで言うと、古くはJMeterやSelenium、最近ではPhantomJSなどJavascript製のものもあります。

    実際のブラウザ操作を自動化するブラウザテストですが、デメリットもあります。
    ブラウザを操作するぶんテストに時間がかかること、あるいはテストの修正に手間がかかるというものです。
    仕様の変更に応じてテストも修正する場合、ユニットテストよりもテストコードの修正が複雑になることが多いようです。

    まとめ


    テスト自体は開発するシステムの価値を増やすものではありませんが、エラーの発生するシステムは誰にも使ってもらえません。
    テストのやりかたを効率化することで、システムの価値を増すことに集中できるようにしましょう!

    様々な分野で活躍するエンジニアが在籍するソリューション事業部はこちら

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket

  • vim操作解説(初級・補完機能)

  • 2018/06/18
  • Category:
  • コーディングをする上で多くの人がお世話になっている機能として、補完機能があげられます。
    補完機能を活用することで、入力する文字を減らすことで省力化し、すでにある文字列を再利用することでタイプミスを減らすことができます。
    最近のエディタであれば使える機能ですが、vimは複数の補完機能を使い分けることでより効率化できます。
    ここでは、筆者が多用する補完機能をいくつか紹介します。

    キーワード補完

    画面内・ファイル内の文字列を補完します。
    補完機能というと、このイメージになるかと思います。
    vimでは以下のように入力することでキーワード補完が実行されます。

    Ctrl + xを押下してからCtrl + p
    ※vimの設定ファイルにはなどと記述されることもあります。

    辞書補完

    ここから、他のエディタではあまり見られない補完になるのかなと思います。
    辞書補完とは、別ファイルに定義した文字列を補完するというものです。
    例えば、text.dictというファイルに以下のような入力があったとします。

    abcdefghijkl
    aaaabbbbcccc

    ファイルを読みこみ、abcまで入力してから以下のコマンドを実行すると辞書補完を行います。

    Ctrl + xを押下してからCtrl + k

    abc → abcdefghijklまで補完される

    この補完方法は頻繁に入力するキーワードを登録しておくという使いかたをすると、効果があります。

    ファイルパス補完

    ライブラリのインクルードを行うとき、以下の入力でパス指定の補完ができるようになります。

    Ctrl + xを押下してからCtrl + f

    パスの補完はWindowsのような c:\Users\xxxxのような形式も、Linuxの/home/user/xxxxのような両方のパス指定形式を意識せずに実行できるため、ファイルパスが思い出せないようであれば、気軽にを実行していいでしょう。

    まとめ

    vimには他にも便利な補完機能がありますが、ここではプログラム言語に依存しない、代表的なものを取り上げました。
    プログラム言語ごとの補完や、補完の自動化などより便利に使う方法については、別の記事で紹介できればと思います!

    様々な分野で活躍するエンジニアが在籍するソリューション事業部はこちら

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket

  • ブラウザ処理だけを行い軽快に動作するヘッドレスブラウザとは

  • 2018/06/16
  • Category:
  • ブラウザが表示されないブラウザと聞いて、どのようなものが想像できるでしょうか?
    とはいえ、ブラウザを使わないブラウザというのは昔からあったりします。
    Unixの世界においてはw3mやlynxといったテキストのみで表現するテキストブラウザが存在します。
    実際のところ、ヘッドレスブラウザもまたターミナルで通常のブラウザ同様のhttpやりとりを行います。
    それではテキストブラウザと同じではないかという疑問もあるでしょうが、ヘッドレスブラウザと別の名前がついていることには意味があり、役割が異なります。

    なにに使うのか?

    ブラウザ操作を自動化することで効率化を図るE2E(End to End)テストを実施するなかで感じる欠点を、ヘッドレスブラウザは解消することができます。
    欠点とは、E2Eテストは実際にブラウザを操作するため時間がかかるというものです。
    テストを行う上で、サイトの表示を確認できるならば、必ずしもブラウザを起動する必要はありません。
    httpのやりとりを行い、htmlの構造だけを取得&テストできれば良いのです。
    そこで登場したのが、画面描画を行わない、ブラウザの処理だけを行う軽快に動作するヘッドレスブラウザが登場しました。

    Chrome DevTools Protocol

    PhantomJsやCasperという、node.jsを使うヘッドレスブラウザがありますが(実際はseleniumと組み合わせて使用)、最近ではGoogle Chromeが公式にヘッドレスモードを搭載することで、こちらが使用されています。
    Firefoxもヘッドレスモードが入っており、主要ブラウザがヘッドレスモードを搭載する流れになっています(そのためPhantomJsは開発終了のアナウンスが発表されています)。

    まとめ

    ユニットテストでコードのテストを完全にしても、ブラウザで動かしてみないと正しく動作するかはわかりません。
    最終的は目視と手動でのブラウザテストが必要となりますが、普段からヘッドレスブラウザでのテストを自動化することによって普段のテストを効率化しましょう!

    様々な分野で活躍するエンジニアが在籍するソリューション事業部はこちら

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket

  • vim操作解説(初級・移動操作)

  • 2018/06/12
  • Category:
  • 前回の解説では、本当に基礎的な部分を扱いました。
    今記事では、移動に焦点を当てて解説できればと思います。
    ソフトウェア開発をする上で、IDEやエディタの操作をざっくり分類すると、文字を入力するか、カーソルで移動するか、コピーや削除など編集するかのいずれかになるでしょう。

    カーソル移動(応用)

    前回の記事で、上下左右の移動は編集モード時にhjklを使って移動するものと解説しました。
    今回はvimの特製と合わせて紹介します。
    vimの編集モードを入力する前に、数字を入力することができます。
    なんの役に立つのか? という疑問は当然です。
    例としては以下のように使用します。

    10j → 10行下に移動
    10l → 10文字左に移動

    このような操作に慣れると、矢印キーを押しっぱなしにして移動するよりもずっとスムーズに移動できるようになります。
    ここでのポイントは複数文字の移動よりも、数字の部分です。
    数字+操作の組み合わせは移動操作に限らず、vimの編集操作全般に活用できますので、ぜひ覚えておきましょう。

    単語移動

    単語単位移動と言われてもぴんとこないかもしれません。
    例えば、I have a pen.というテキストがあったとき、単語移動をすると以下のように移動できます。

    ※以下の文章において * をカーソル位置とします。

    I * have a pen.
     ↓単語移動
    I have * a pen.
     ↓単語移動
    I have a * pen.
     ↓単語移動
    I have a pen * .

    キーボードの矢印キーを連打するよりもずっと効率的に移動することができますね。

    単語移動操作、実はWindowsでも可能です。
    Ctrl + →で、右方向に単語移動ができます。メモ帳でもできるので、お試しください。

    vimの場合は、編集モードのとき以下の入力で可能です。

    w : 右方向に単語移動
    b : 左方向に単語移動
    e : 右方向に単語移動(単語の末尾へ移動)
    ge : 左方向に単語移動(単語の末尾へ移動)

    もちろんカーソル移動と同様に4wで4単語分右方向へ移動といったこともできます。
    vimを使う人は普段、10jや4wといった一気に移動できる操作で「おおまかに移動」してから、hjklで移動先へ微調整するという操作をしています(vimを使っている人の画面を見せてもらうと、だいたいそうでした)。

    行単位移動

    これはvim特有の移動方法になります(他の主要エディタで使えるのを見たことがないため)。
    例として、以下のようなテキストがあったとします。

    * I like vim editor.

    行頭にカーソルがあるとして、 fv と入力すると

    I like * vim editor.

    最初にvがある場所まで一気に移動します。
    この操作法に慣れると、上記の単語移動よりも正確に狙った場所へ移動し、すぐ編集ができるようになります。
    逆方向に移動する場合は Fl と入力すると、

    I * like vim editor.

    左方向に移動します。

    まとめ

    他にも便利な移動方法は複数ありますが、今回はすぐ使えそうなものを選んで紹介してみました。
    vimは学習コストが高く、使いこなすまでに時間がかかるかもしれませんが、投資した時間に見合うリターンのある(と信じている)エディターなので、この記事を機に触ってみてはいかがでしょうか?

    様々な分野で活躍するエンジニアが在籍するソリューション事業部はこちら

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket

  • 環境設定をコードとして表現できるプロビジョニングツール『MItamae』

  • 2018/06/05
  • Category:
  • 以前記載したVagrantの記事より、Vagrantを使うことで開発環境構築の効率化をすることができるようになりましたが、面倒なアプリケーションのインストールや設定が必要であるという問題が残ったままであることを示しました。

    今回はアプリケーションのインストール・設定を解決する方法として、プロビジョニングツールの紹介をします。

    プロビジョニングツールとは

    OSへのアプリケーションインストール・設定を自動化するツールとイメージしてもらえれば問題ありません。

    大きな特徴としては、設定内容をコードとして表現できるところです。
    Infrastructure as a codeという言葉をご存じでしょうか。
    インフラ(開発基盤となるOSやミドルウェアの設定等)をコードで表現することで、何度でも、自動的に環境構築ができるというものです。

    プロビジョニングツールにはChefやAnsibleなど代表的なものがありますが、今回はそのなかでもシンプルに使えるMItamaeを紹介します。

    MItamaeとは

    実はMItamaeにはitamaeという前身があります。
    itamaeはクックパッドで開発・利用されているプロビジョニングツールで、MItamaeはitamaeのフォーク版となります。
    実際のところ、itamaeとMItamaeは使用方法はまったく同じです(同じになるよう開発されている)。

    では、どこが違うのでしょうか?

    itamaeはrubyで開発されており、動作させるために複数のライブラリのインストールが必要なのに対して、MItamaeは1つの実行ファイルのみで依存ライブラリが必要ないところです。
    面倒な事前準備なしにMItamaeのファイルと設定ファイルのみで良いので、見通しが良くなります。

    どのように使うのか?

    MItamaeはmrubyで記述されており、設定もrubyぽく記述できます。
    例として、パッケージ管理システムからライブラリをインストールする例を紹介します。

    execute “update yum” do
    user “root”
    command “yum -y update”
    end

    %w[gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel git libtool autoconf automake cmake gcc-c++ make pkgconfig unzip texinfo libevent-devel].each do |pkg|
    package “#{pkg}” do
    user “root”
    action :install
    end
    end

    ……いきなり面倒そうなコードが出てきてとまどうかもしれませんね。
    こちらをrecipe.rbというファイルに保存して、以下のコマンドを実行すると、CentOSのパッケージ管理システムであるyumでのライブラリアップデート、指定したライブラリの新規インストールが実行されます。

    MItamae local recipe.rb

    上記の要領で、必要な設定すべてをコードとして記述すれば、Vagrantをインストールし、仮想マシンでMItamaeを実行すれば開発環境の構築が完了します。

    まとめ


    前回のVagrantの紹介と合わせて、開発環境構築の自動化という切り口でMItamaeを紹介しました。
    面倒な作業は自動化して、開発に集中できるようにしていきましょう!

    最先端技術を扱うエンジニアが在籍するソリューション事業部はこちら

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket

  • 作業効率が上がる仮想環境『Vgrant』とは

  • 2018/05/28
  • Category:
  • エンジニアの仕事に必要な開発環境を構築するのは、とても手間がかかります。
    各種アプリケーションをインストールしたものの、他の環境では動いたのに自分のPCだと動かない、設定し終えてもバックアップが大変、複数プロジェクトを並行作業すると設定が複雑になってしまう……、いろいろな問題が発生することがあります。

    上記のタイトルはエンジニアをしていると、1度は聴いたことのあるかもしれないフレーズですが、これは矛盾しているようである意味の真理です。
    同じことを繰り返さない、繰り返さなければならないならば自動化する——そうしなければ本来集中すべき内容に手をつけられないためです。

    では、どのようにすれば良いのでしょうか?

    仮想環境を効率的に構築するためのVagrant

    今記事においては解決策の1つとして、Vagrantを紹介します。
    Vgrantとは、仮想環境を効率的に構築するためのソフトウエアです。
    WindowsやMacといったOSのなかに、さらにOSをインストールするイメージとなります。

    Vagrantの利点

    Vagrantを使うことで、上記の問題を解決することができるようになります。

    他の環境では動いたのに自分のPCだと動かない

    動作が保証された環境を構築、配布することで、どのMacやWindowsを問わずに同じ環境を用意できる。

    バックアップが大変

    Vagrantは設定が1つのファイルにまとまっており、復元が簡単。

    複数プロジェクトを並行作業すると設定が複雑に

    プロジェクトごとにVagrantを用意することで、余計なツールが入らない安定した環境を使用できる。

    Vagrantのインストール手順

    注:この記事では仮想環境としてLinux(CentOS7.4)を構築するものとします

    実際にVagrantをインストールするには、以下サイトからインストーラーをダウンロードして実行します。
    Vagrantと合わせて、仮想環境を構築するためにVirtualBoxもインストールしてください。
    Windows, Mac, Linux版それぞれ実行ファイルが用意されておりますので、環境に合わせてください。

    http://www.vagrantup.com/
    http://www.oracle.com/technetwork/jp/server-storage/virtualbox/downloads/index.html

    VMの設定

    インストールが完了したら、実際に設定してみましょう。

    今回は次のようなフォルダを作成し、このなかで作業を行います。
    Windows: C:\vagrant
    Mac : /Users/ユーザ名/vagrant

    ターミナルまたはコマンドプロンプトを開き、上記フォルダまで移動してから以下のコマンドを実行します。

    vagrant box add bento/centos-7.4

    これだけのコマンドで、インターネットからLinuxをダウンロード・インストールされ、最低限の設定が行われます!

    次にVagrantの設定ファイルを作成します。

    vagrant init

    フォルダのなかにVagrantfileというファイルがあれば成功です。
    このファイルにカスタマイズしたい内容を記述するのですが、動かすのみであれば不要のため省略します。

    Vagrantの起動方法

    vagrnt up

    必要なコマンドはこれだけです。簡単ですね。
    しばらく待つとLinux(CentOS)が起動します。

    これで仮想環境のできあがりです。不要になったら以下コマンドで終了させ、Vagrantfileを削除すれば環境の削除も簡単です。

    vagrant halt

    まとめ

    上記設定をすることで、プロジェクトごとの仮想環境を用意することができるようになりました。
    しかし、Vagrantはすべての問題を解決するソフトウェアではありません。
    Vagrantで仮想環境を用意しても、結局は各種ソフトウェアをインストールしなければならないという問題は残ったままです。
    もちろん、解決策はあります。

    今回はVagrantの紹介が長くなってしまったため、次回の記事で紹介できればと思います。

    様々シーンにおいてシステムアテンドを行うITソリューション事業部はこちら

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket

  • phpMyAdminに代わる新しいオススメツール

  • 2018/05/21
  • Category:
  • DBをGUIで操作するツールとして、phpMyAdminを便利に使っています。
    ターミナルからmysqlにログインして、直接SQLを実行しても良いのですが、ちょっとしたSELECT文を試したいくらいのときにはおおげさです。
    しかし、サーバの設定の都合上phpMyAdminをインストールできない場合があります。
    あるいは、phpMyAdminをインストールすることが手間な場合もあります。

    上記のような場合、がんばってターミナルからSQLを実行するしかないのでしょうか?
    もっと、便利な方法があるはずので、探してみました。

    Macならsequel pro

    Mac環境の場合は、Sequel Proが定番のDBクライアントとなります(他にあったら教えてください!)。
    基本的にMySQLのためのクライアントとなりますが、見た目のUIなどはphpMyAdminに似ているため、違和感なく移行できるかと思います。
    テーブル操作やSQLの実行まで、一通りのことができるため、Mac環境であればSequel Proがあれば問題なく使えそうです。

    WindowsではA5:SQL Mk-2, MySQL Workbench

    普段仕事をする環境はWindowsなのでSequel Proを探してみましたが、Windows版がありません。
    ただ、類似のアプリケーションとして、A5:SQL Mk-2, MySQL Workbenchがあります。
    両方ともphpMyAdminに似たことができますが、A5:SQL Mk-2はどちらかというとDBのモデリングが主な機能であり、MySQL WorkbenchはMySQL専用でテーブル操作にはあまり向かないという印象があり、実際に業務で使用するならば使い分けることになりそうです。

    Linuxでがんばるならmycli

    上記はGUIでDBを操作できるものを取り扱いました。
    しかし、どうでしてもターミナルから操作しなければならない場合もあります。
    GUIに慣れていると、SQLのコマンドが思い出せずに検索して時間がかかることがよくあります(筆者がそうです……)。
    そこで少しでもSQL入力を楽にする方法として、mycliがあります。
    mycliはデフォルトのmysqlコマンドを代替するもので、mycli -u root -pなどとしてログインすると、コマンドやテーブルの補完機能を使うことができるようになります。
    SQLの文法が思い出せいない場合、何文字かを入力してタブキーを押せば、それらしいコマンドをサジェストしてくれるので、いろいろはかどります。

    まとめ

    主要な環境で使えるDB操作アプリケーションを紹介してみました。
    DBは1つ操作を間違えると大変な結果になるため、素早く正確に(しかも簡単に!)できるようにしておきましょう。

    日々多様化・複雑化していくあらゆるシーンに於いて、シームレスにアテンドするソリューション事業部はこちら

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket

  • デバッグへの取り組み

  • 2018/05/18
  • Category:
  • 開発をする上で、どうしても発生するのがバグです。
    バグのない開発ができれば言うことありませんが、実際はいろいろな原因で問題が発生するものです。
    発生してしまったバグをどのようにデバッグすればいいのか、普段気をつけていることを整理してみたいと思います。

    バグの再現

    バグを発見すると、反射的に修正したくなるかもしれません。しかし、ここを我慢しましょう。
    修正しようとする前に、まずそのバグが確実に発生するのかを確かめましょう。
    バグが発生したりしなかったりする状況は、なにを修正するのかすらあいまいになってしまうため、無駄な時間を使うことになりかねないためです。
    再現させるための前提として、サーバや開発言語を可能な限りバグが発生した環境と同じに揃えるなどして、1つ1つ不確定要素を潰すようにすると良いでしょう。

    原因の特定

    バグを再現できるようになったら、次は原因を特定しましょう。
    原因を特定する方法はエンジニアの数だけやりかたがありますが、おおむねのところ共通する手法は以下になるのではないでしょうか。

    01.仮説を立てる
    02.ログなど事実(データなど)を収集する

    実際のデバッグにおいては、2つのうちどちらか1つを使うというものではなく、両方の組み合わせになるかと思います。

    注意すべきは、なにを調べたら良いのかわからず、闇雲に原因を調査することです。
    とはいえ、実際に調査する方針がつかめないこともあるため、闇雲に調べる場合はせめてどのようなことを調査したのかを書きだしておくと、1つ1つ原因を追いこんでいくための助けになるかと思います。

    用途に応じた修正

    原因が特定できたら、いよいよ実際の修正を行いますが、ここでも考慮したいポイントがあります。

    01.簡単で根本的な修正
    02.難しくて根本的な修正
    03.簡単で場当たり的な修正
    04.難しくて場当たり的な修正

    ※根本的な修正とは、今後の変更や拡張性などを考慮した修正であり、場当たり的な修正とはとりあえず問題が解決していれば良いものとする修正を表します。

    基本としては根本的な修正を行うべきですが、実際は1から4のうちどれを選ぶかは状況に左右されます。

    場当たり的な修正が良くないとわかっていても、時間的な制約で選ばなければならないことがあります。
    そのような場合はコメントを残したりチケットに登録したりと、後に対応することになったとき、少しでも楽になるようにすると良いかもしれません。
    なにしろ自分で記述したコードであっても、1カ月後には忘れていることもあるためです。

    修正の確認

    問題が修正できたら、実際に修正できているのかを検証しましょう。
    修正したての状態だと、特定の条件下のみでは意図通りの動きをするが、条件を変えたとたんに動かなくなる場合が多いためです。
    特に、場当たり的な修正を実施した場合は、修正したことの副作用として別の場所でバグが発生するということすらありえます。
    ここでハマると、場当たり的な修正→別の場所でバグが発生→場当たり的な修正……というループにハマってしまわないように気をつけたいところです。

    まとめ

    デバッグ方法を整理しましたが、書かれていることは当たり前のことかもしれません。
    しかし、どのような状況でも上記ステップを着実に踏んで進められるかとなると、話が変わってきます。
    ハマってしまうと、気がつくと闇雲に原因を探してしまっている……、ということは良くあります。

    上記ステップを踏んでデバッグを行い、その上でどうしても解決できないバグがある場合はどうすれば良いものでしょうか?

    答えの1つとはしては、その日は切り上げて帰って寝てしまうことです。

    身も蓋もない答えかもしれません。しかし1日かかって解決しなかった問題が、次の日すっきりした頭で取り組むと10分で解決するということが意外とあるためです。
    だいたいの場合、解決方法は複数あるものだったりします。
    頭がすっきりしているときに改めて取り組むことも、立派な解決策の1つであることを思い出せるようにしておきましょう!

    日々多様化・複雑化していくあらゆるシーンに於いて、シームレスにアテンドするソリューション事業部はこちら

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket

  • インデックスを使用してデータベースの検索速度を高める

  • 2018/05/14
  • Category:
  • データベースのパフォーマンスを考える上で、本でいう目次に相当する機能であるインデックスを適切に設定することは重要です。
    インデックスはデータベースの検索速度に大きく影響し、引いてはWebサービスの快適さに直結します。
    今記事ではインデックスについて整理してみましょう。

    インデックスのメリットデメリット

    先ほども記述しましたが、インデックス機能を使うメリットは検索速度の向上です。
    使いかたによっては10倍以上も速度向上が見こめるため、適切なインデックスの使用は必須と言えるでしょう。

    逆に、デメリットもあります。
    インデックスはINSERT, UPDATE, DELETEを実施するたびに再生成されます。
    そのため、変更の多いテーブルにインデックスを作ると、逆に動作速度が低下することもあります。
    また、巨大なテーブルにインデックスを作ると、インデックスのファイルサイズが大きくなるという問題もあります。

    インデックスをどこに使うか?

    実際にインデックスを設置するには、どのようにすれば良いでしょうか?
    もちろんデータベースのテーブル構造ごとに異なりますが、おおまかな指針を考えてみます。

    01.WHERE句
    インデックスは検索速度を向上させるため、実際にWHERE句に使うカラムに設定すると効率化が見込めます。
    ただし、データ量が多く変更が多いカラムの場合は、インデックスの再生成が何度も実施されてしまうため、かえってパフォーマンス低下の怖れがあります。

    02.結合条件
    これは上記WHERE句と同様に、絞り込みを行う条件であるため、インデックスを効果的に使用できるためとなります。

    03.カラムの値の種類が多い
    区分などで0か1など、条件しかデータがない場合は、インデックスは効果を発揮しません。
    名前など、データが複数あるもののほうがインデックスを使用するものとしては望ましいものとなります。

    まとめ

    データベースの速度はサービスの快適さに直結します。
    ユーザに使いやすいサービスを提供するため、常に速度を意識したデータベースを構築しましょう。

    ●Wantedly掲載情報(本当にやりたいことに辿り着きたい技術大好きエンジニア募集!)

    ●Wantedly掲載情報(エンジニア想いの環境でJavaやPHPにチャレンジしたいエンジニア募集!)

    ●Wantedly掲載情報(Angular/Reactを極めたいフロントエンジニア大募集!!)

Pocket