【Python(パイソン) 人工知能作り方】ライブラリ13選&機械学習の方法・pythonでの人工知能の開発手順を詳しくご紹介!

「pythonを使用した人工知能の開発について詳しく知りたい」

「pythonで活用できるライブラリはどんなものがあるのか知りたい」

「pythonで人工知能を開発する手順を知りたい」

システムのプログラミングに携わっている方や、未経験だけど開発をしてみたいという方であれば「python」というプログラミング言語に興味を持っている方は少なくないでしょう。pythonは人工知能をはじめ、Webアプリやデータの分析などに用いられるプログラミング言語で、「pythonさえ習得すれば問題ない」と言われるほど世界中で注目されています。

人工知能は近年目覚ましい発展を遂げており、例えばお掃除ロボットや自動車の自動運転などが挙げられます。また、ソフトバンクが開発した「Pepper」は、人の感情を認識できるロボットとして一躍大きな話題となりました。このように、最先端技術でもある人工知能は、既に生活に密着した存在となっており、今後さらに開発需要が高まるとされています。

そんな人工知能の開発に、特に人気の高いプログラミング言語が「python」です。

本記事では、pythonの開発手順だけではなく、活用する事が出来るライブラリ13選、人工知能開発を支える機械学習の3つの方法について、詳しくご紹介致します。

pythonは初心者の方でも理解しやすく分かりやすい文法が大きな魅力のプログラミング言語となります。本記事でご紹介する内容を正しく把握する事で、今現在プログラマーとして活躍している方はもちろん、これからプログラミング言語を習得しようとしている方、開発に興味はあるけど経験はあまりないという方でも、人工知能の開発に関する様々な情報をしっかりと吸収できるでしょう。

pythonで活用できるライブラリ

ライブラリとは、汎用性の高い処理を誰でも簡単に利用できるようにしたプログラムを指します。このライブラリをうまく活用する事で、プログラムを0から全て組む必要がなくなり、スピーディかつ効率的にプログラムの設定が行えるようになるでしょう。

pythonはコードが少なくシンプルという特徴があり、初心者でもすぐに理解できるのが魅力のプログラミング言語です。さらに、活用できるライブラリも充実しており、人工知能に最適な種類も数多く存在しています。簡潔で分かりやすいコードのpythonと、使いやすいライブラリを組み合わせることで、人工知能の開発がさらにやりやすくなるでしょう。

ここで、pythonで活用できるライブラリ13選をそれぞれ1つずつ詳しくご紹介致します。

TensorFlow

URL:https://www.tensorflow.org/?hl=ja

有名なオープンソースライブラリで、2015年にGoogleが開発しました。TensorFlowの最大の特徴として挙げられるのが、ニューラルネットワークの構築や訓練が出来るシステムの要求に応えることが出来るという点です。人間の脳内にある神経細胞の繋がりを数式的モデルで表したものをニューラルネットワークと言います。

ニューラルネットワークを使用する事で、機械が倫理的思考や学習などを、人と同じように行うことが可能になります。TensorFlowの活用は、ある程度のディープランニング知識は必要ではありますが、複数の抽象化レベルを提供しているため、状況やニーズに合わせ、最も適したものを選択する事が出来るライブラリになります。

matplotlib

URL:https://matplotlib.org/stable/index.html

matplotlibを使用して科学計算を簡単にすることで、その計算結果を様々な表やグラフとして分かりやすい表示が可能となります。pythonでグラフ作成を行う場合、最も標準的なライブラリと言えるでしょう。matplotlibで作成するグラフは主に二次元のグラフになりますが、三次元のグラフ描画も可能です。

matplotlibで作成できるものは、円グラフ、散布図、棒グラフや折れ線グラフなど多岐にわたります。また、matplotlibは後程ご紹介するNumPyとの組み合わせで活用するという事が多くあります。さらに、Jupyter Notebookを用いることによって説明力が高いレポートの作成も行えるでしょう。

Open CV

URL:https://opencv.org/

画像や動画の処理を行う場合、最も汎用性が高く人気なのがこのライブラリです。Open CVはIntelが開発し、OSSとして提供されているので誰でも使用できますし、もちろん料金は無料です。趣味範囲の利用から商業目的の利用まで可能なため、幅広く活用されているライブラリになります。

ロボット工学などの学術的シーンのみに限らず、プログラミング学習、システム開発など様々な用途で利用できるOpen CVは、AndroidやiOSなどにも対応しています。pythonでOpen CVを利用する場合、専用の「OpenCV-python」があります。インストールも比較的簡単に可能なので気軽に活用する事が出来るでしょう。

Keras

URL:https://keras.io/ja/

プログラミングが初心者という方に最適なライブラリでもあるKerasは、専門的な知識がないという場合でもコードを書くことが出来ます。このKerasの大きな特徴として挙げられるのが、機械学習分野で話題にもなったアルゴリズムを多く実装しているという点です。さらに日本語のドキュメントも非常に多いため、非常に活用しやすいライブラリと言えるでしょう。

Kerasは文章をあらかじめが学習させておけば自動生成が出来ます。例えば、夏目漱石の小説「吾輩は猫である」の全文をあらかじめ学習させておきます。学習が完了した後に小説の冒頭「吾輩は猫である。名前は」という文章を与えると、その後の文章を自動で生成してくれます。さらに、質問を入力して答えてくれるという機械による自動発信システム、botの作成も可能となります。

Numpy

URL:https://numpy.org/

pythonでの機械学習計算をより効率的に、早く行えるように拡張するのが、Numpyになります。人工知能や機械学習においては必須と言われるほど活用されているライブラリになりますので、ぜひ押さえておきましょう。大量のデータ処理をするためにはかなりの時間が必要となりますが、Numpyを利用する事で大幅に時間短縮する事が可能になります。

データ処理での速度を上げたい場合pythonのリストよりもNumpyの配列の方が高機能、かつ高速処理をしてくれます。「Anaconda」というpythonのライブラリが揃っているパッケージにも含まれていますが、単体でインストールする事も可能ですので、ご自身の開発環境などに適した方法でインストールしましょう。

SciPy

URL:https://scipy.org/

SciPyは数学、化学、高額のための数値を解析するためのライブラリです。オープンソースとして常に開発が行われています。高度な科学技術計算が可能なため、世界的な科学者やエンジニアが活用していることでも知られています。「高度な計算」と言うと、多くの方が難しく捉えてしまいますが、中には馴染みのある計算などもありますので、科学者のみが活用できるものと言う訳ではありません。

SciPyで可能な科学技術計算には、「クラスター分析」「数値積分」「物理定数」「線形代数」「空間的データ構造とアルゴリズム」「多次元画像処理」「データ入出力」などがあります。馴染みがないものばかりでも、便利な関数があればぜひどんどん活用していきましょう。

Chainer

URL:https://tutorials.chainer.org/ja/

日本の機械学習のベンチャー企業であるPFN(Preferred Networks)が開発したライブラリで、日本語資料が多いという特徴があります。ディープラーニング向けのフレームワークとしては非常に有名どころと言えるでしょう。ディープラーニングとは、豊富なデータがあれば自動的にその特徴を抽出してくれるDNN(ディープニュートラルネットワーク)用いた学習です。

GPUによる演算サポートも可能です。人工知能開発の初心者がGPUを活用して機械学習やディープラーニングの取り組みをするという場合、環境の構築を行うためには非常に手間と時間がかかってしまいます。しかし、chainerであればセットアップ作業のための時間を大幅に削減する事が出来るため、コンテナ技術の適用も可能です。

BeautifulSoup

URL:https://pypi.org/

HTML、XMLからデータを引き出せるライブラリになります。ですが、前提として、「BeautifulSoupのみがあればスクレイピングが可能」という事ではありません。HTTP通信が可能なRequestsというモジュールを活用し、HTMLのデータをスクレイピングします。その後、そのHTMLを整形するためにこのBeautifulSoupが利用されています。

取得したデータを見やすくするために活用されるRequestsは、人工知能の基礎ともいうべき非常に重要な部分と言えるでしょう。スクレイピングに必要な処理は一通りそろっていますので、初心者でも活用しやすいライブラリです。

Pandas

URL:https://pandas.pydata.org/

データの分析を効率的に行うための人工知能ライブラリですが、データフレームなど独自のデータ構造が提出されており、データ読み込み、統計量表示やグラフ化なども簡単に行えます。例えばNumPy配列は要素の全てが同じでなければいけません。しかしPandasであれば異なるデータを入れることが可能です。データフレームに格納すればデータ前処理が簡単にできます。

また、欠損値の削除や補完、様々な便利な関数が備わっています。主要言語は、pythonがC言語で書かれているため高速処理が可能と言うのが大きな特徴です。Pandasはデータの前処理段階で活用されるものとなるため、機械学習を行う場合は必須ライブラリと言えるでしょう。

Anaconda

URL:https://www.anaconda.com/products/individual

pythonの利用は、インストール後に必要なライブラリを追加インストールしなければいけません。Anacondaはpythonの実行環境において、よく利用されるライブラリがまとまっている状態とすることが出来ます。Anacondaは非常に便利なもののため、利用者数はおよそ1,500万人以上にものぼります。

Anacondaは約1,500以上ものパッケージが含まれているディストリビューションです。さらに、250以上のデータサイエンスや機械学習パッケージは自動でインストールされるため、利用者はすぐに開発作業に取り掛かることが可能になります。また、インストールやバージョン管理を簡素化できるという大きな特徴も、ディストリビューションの大きな魅力と言えるでしょう。

PyQuery

URL:https://pypi.org/

情報の取得が可能な人工知能ライブラリです。PHPの経験者の場合、phpQueryというライブラリを使用したことがあるという方は多くいるでしょう。PyQueryはそのpython版と考えることが出来ます。2020年にリリースされており、2021年1月には細心バージョンもリリースされており、メンテナンスも継続的に行われています。

OSに関してはどこでも動かすことが可能となっています。pythonが動けばPyQueryも動かせると考えて間違いではないでしょう。また、jQueryと同じ要領でスクレイピングが可能なため、pythonで気軽にスクレイピングを行いたいという場合は特にオススメのライブラリと言えます。

scikit-learn

URL:https://scikit-learn.org/stable/

人工知能のライブラリにおいて、最も活用されていると言っても過言ではないscikit-learnは、様々な機械学習アルゴリズムが実装されているのが最大の特徴です。現在も活発に開発されているため、多くの情報を探すことが出来るでしょう。また、様々なアルゴリズムが実装されていますが、どれも同じような書き方で利用できるというのも大きなメリットと言えるでしょう。

さらに、サンプルデータセットが付属していますので、インストール後すぐに機械学習を始めることが可能です。利用するためには、先ほどご紹介したAnacondaなどのパッケージを使用するといいでしょう。Anacondaにはこのscikit-learnも含まれていますので、簡単にスタートさせることが出来ます。

Jupyter Notebook

URL:https://jupyter.org/

以前はpython専用の「IPython Notebook」という環境でしたが、現在開発が進んだことにより、python以外にも40以上の言語がサポートされています。しかし、一般的にpythonでの利用が多いと言えるでしょう。オープンソースで提供されているのでもちろん無料で利用が可能です。

Jupyter Notebookはノートブックファイルにプログラム、説明や実行結果などの多くの情報をまとめて管理する事が出来る分析用ライブラリです。Jupyter Notebookはブラウザ上で作動するため、プログラムの共有もできるのが大きな特徴と言えるでしょう。初心者の場合は必須ライブラリと言っても過言ではありません。

人工知能を支える技術「機械学習」の方法

機械学習とは、AIを支えている重要な技術です。AIは1956年初めて定義されています。その後研究が長く行われていき、ICTの実用化、ビッグデータ環境などが整いつつあり、今現在機械学習が実用化される時代へとなりました。近年では、この機械学習がさらに発展してきており、人工知能の概念「機会が知能を持つ」という事に近づくことで、技術的特異点という言葉も注目され始めています。

この機械学習の手法は3つの学習方法が存在します。それぞれの詳しい内容について正しく知り、人工知能の開発を効率的に行えるようにしましょう。

教師あり学習

正解データを教えていく学習方法が、教師あり学習です。正しく正確なデータを学ばせることにより、入力したデータに対する正解を出力する事が可能となります。教師あり学習は「識別」「回帰」を可能とします。

識別とは

与えられたデータをもとにして、出力するデータが正しいか正しくないかを分類、認識するものとなります。例えば受信メールが迷惑メールやスパムメールかどうかを判断する事が出来ます。教師あり学習では、前もって迷惑メールなどのパターンを学習させているため、正しく分類が可能となります。また、人と動物が一緒に移っている写真を「人」「動物」に分類し、写真データを自動でグループ分けすることも出来ます。

回帰とは

一定間隔で連続するデータを数値として学習し、今後の予測に役立たせることが出来ます。企業の売上予測であれば、毎月、毎年の売り上げ学習をさせることで今後の売り上げ予測が出来ます。また、天気の学習を行えば雨雲の降水確率が上げられるなど、業種に限らず効率的に役立たせることが可能となるでしょう。

教師なし学習

教師あり学習とは逆に、正解データを教えずに学習をさせる方法になります。豊富なデータを覚えさせることにより、そのパターンや特徴などは覚えることは出来ますが、それが正解か不正解かを判断する事は覚えさせないというのが、この学習方法の大きな特徴です。代表的な物はクラスタリングです。

クラスタリングとは?

豊富なデータをカテゴリごとに分類して、グループ化を行う機能がクラスタリングです。教師あり学習と大きく異なる部分は、正解データを知らない状態でのグループ化です。クラスタリングでは、多くの画像データの中から性別、動物などの種類を分類したり、動画のデータから自動車のみを抽出するなどが可能となります。

また、例えば0歳から80歳の人々の画像を学習させることにより、顔の大きさ、しわの数、表情などを取得します。それにより、年齢別のグループ分けをすることを学びます。これが、教師なし学習の代表的なクラスタリングです。

強化学習

強化学習では、教師なし学習のように、正解を覚えさせる必要性がありません。ですが、教師なし学習と異なるのは機械が報酬を得るために最適な行動を考えて実行するという点です。強化学習では、出力される結果に点数をつけ、最適な結果とするための行動を学ばせます。

強化学習では、複雑な迷路をいかに最短でゴールまでたどり着くことが出来るのか、株式の売買でいかに利益を最大化させることが出来るのかなど、こうした事を考える機械をイメージするのが最も分かりやすい例と言えるでしょう。

pythonによる人工知能の開発方法

pythonを活用し、人工知能の開発を行うにはどのような方法で行うのかを詳しくご紹介致します。大まかな手順としては、pythonのインストールを行った後にライブラリのインストール、その後データを集め手法の検討を行います。そして人工知能に学習をさせて開発となります。それぞれの手順を詳しく解説いたします。

1・pythonのインストール

まずはpythonをインストールします。Windowsの場合、公式サイトからインストールを行ってください。Macであればすでに入っている状態になっていることもありますが、ほとんど古いバージョンでインストールされていますので、最新のものをインストールする必要があります。それぞれの方法について詳しくご紹介致します。

Windowsの場合

まず、公式サイトへ行き、画面上の「Downloads」欄からWindowsを選択します。クリックすると「Python Releases for Windows」ページへ移動します。pythonは幾度もバージョンアップされているため、必ず最新のものを選ぶようにして下さい。ダウンロードが完了しましたら、すぐに実行をします。インストール画面が表示されますので、その後は画面に表示される指示の通りに進めていきましょう。これでインストール作業は完了となります。

Macの場合

Windowsとは異なり、先ほどもお話ししたように既にインストールされているという場合がほとんどですが、最新のものに変える必要があります。多くは「python2」が入っている状態ですが、これは最新版とは文法なども異なるものになってしまいますので、バージョンを確認し必ず最新に変えて下さい。Macの場合、公式サイトの画面上の「Downloads」欄からMac OS Xを選択します。その後はWindows同様に、バージョンの確認、インストール後画面に従って進めていけば完了となります。

インストールされているか確認

インストールが完了したら、必ず正確にインストールが出来ているかを確認してください。Windowsであれば「コマンドプロント」、Macであれば「ターミナル」からコマンドプロントを開いて確認します。

  • Windows:「Windows」+「R」→ファイル名を選択して実行→「cmd」入力→OK
  • Mac:Finder→アプリケーション→ユーティリティ→ターミナル

それぞれ上記の手順でコマンドプロントを開き、「python –version」を入力します。pythonのバージョンが正しくひょじされていればインストールは成功していますので、安心して次の作業に移ってください。

また、Macは古いバージョンが既にインストールされているため、最新版をインストールしたにもかかわらず表示が「Python 2.・.・」と表示されていることがあります。この場合は、最新版のインストールが正しくできていないという事になりますので、再度公式サイトからインストール作業を行ってみて下さい。

動作の確認

インストールが正しく行われているかどうか確認が完了したら、次は動作の確認を行います。正常に動作するかどうかの確認は、実際にプログラムを作成し動かしてみるという方法が確実です。まずテキストエディタを開きます。そこに【print(“Hello world!”)】と入力します。これは1文字でも違うと正常に動作しないため、注意してください。

ファイル名を記載したらドキュメントの下に保存します。ここでは、ファイル名は「test.py」で保存しましょう。次に、先ほど開いたコマンドラインに「cd Documents(cd コマンド名)」を入力します。その後「python test.py

」と入力しエンターキーを押します。「python ソースファイル名」でPythonプログラムを実行できます。

画面に「Hello world!」と表示がされれば正常に動作するという確認になりますので、安心してください。もし正常に表示されない場合、どこかで間違っているという場合がありますので、再度確認作業を行ってください。

2・人工知能のライブラリをインストール

pythonのインストールと確認作業が完了したら、次にライブラリをインストールします。本記事で紹介したような多くの種類から、自身が活用すべきライブラリをインストールしてください。この場合、多くの機械学習アルゴリズムが実装されているscikit-learnやAnacondaがオススメです。インストールが完了したら、python同様に正しく使えるかを確認し、問題がなければ機能を使用してみて下さい。

ライブラリをインストールする際の注意点

ライブラリをインストールする場合、それぞれに注意点がありますので必ず確認するようにして下さい。例えば、機械学習を早く効率的に行うためのライブラリ「Numpy」の場合、インストールする前にpipの更新が必須です。pipとは、pythonのパッケージを管理するためのツールです。仮にpipが最新バージョンに更新されていないと、エラーが表示されてしまいますので、必ずインストール前に最新バージョンになっているかチェックして下さい。

また、Anacondaではこのpipを使用することは出来ません。pipでインストールしてしまうと、パッケージの依存関係などで不具合が発生する可能性があります。そのため、今現在pythonを使用していてAnacondaを活用していないという場合、興味本位で導入すると不具合やトラブルが起こりやすくなってしまいますので注意してください。

3・データを集める

python、ライブラリ共に正常にインストールが完了出来たら、次に人工知能に学習させるためのデータを収集します。人工知能は、入力されたデータをもとに学習を行いますので、正しく正常なデータを数多く集めなければいけません。そこで、データ収集に活用すべき2つのポイントについてご紹介致します。

クラウドソーシングを利用したデータ収集

機械学習に必要なデータを集める際、多くの個人や企業で最も懸念されるのが時間とコストです。中でも個人で開発を行う場合や、中小企業で人工知能の開発をするという場合、教師データあり学習であれば、誤りのない正解データを豊富にそろえなければいけません。

これまでは、時間をかけてアルバイトを雇ったり、研究者などは学生に協力を仰ぎデータの収集を行ったりなどが主な収集方法でしたが、現代ではクラウドソーシングと言う存在がこのデータ収集に大きく役立てられるようになりました。

クラウドソーシングの場合、仮に100件ほどのデータを収集したいという際に、タスク形式で依頼を開始することで、一人一人を雇ったり話を聞いたりと言う手間もなく、ほんの数十分から数時間でデータ収集が完了させることが出来ます。また、タスク方式は作業ごとの報酬となるため、無駄なコストもかからず効率的に行っていく事が可能になります。

データ収集が必要となった時だけ、クライドソーシングのワーカーに依頼し、その分の報酬を払う。こういったやり方であれば、時間もコストも無駄にせず、必要なデータを必要な時に必要な分だけ収集する事が可能となります。

無料データセットの活用

機械学習では、画像データやテキストデータなど、様々なデータを取り扱います。さらに、このデータの質や量が人工知能の精密ぢに直接影響を及ぼすため、正しく正確なデータを、莫大な量準備しなければいけません。自分で収集するのには限度があり、趣味の範囲で開発を行う場合このデータ収集に苦労するという方も多くいるでしょう。そんな時に活用すべきなのが無料で使用できるデータセットです。

  • トレーニングセット→1番初めに利用され、最も規模の大きなデータセットになります。
  • バリデーションセット→トレーニングセットで訓練した後、ハイパーパラメーターのチューニングをするために利用します。
  • テストセット→モデル制度を確認するためのデータセットです。

データセットには上記の3種類があり、このデータセットは機械学習において最も重要とされている部分になります。ネット上で公開されているオープンデータは数多くあり、もちろん無料で活用する事が出来ます。大手企業であればGoogleや楽天、また、国内外の政府機関からの利用も可能となっていますので、開発に必要な豊富な量のデータを簡単に入手する事が出来ます。

4・どの手法にするかの検討

次に、人工知能の開発手法を決めます。どのように学習させるかを決めてから本格的に開発をスタートさせます。先ほど紹介したクラスタリングの他も様々な手法があります。ここでは、その中でも特に人気の高いアンサンブル学習、k近傍法についてご紹介致します。

アンサンブル学習

簡単に言えば多数決を取る方法です。単独では精度が低くなってしまう弱学習器を複数用いることにより、高い精度をたたき出すという手法がこのアンサンブル学習です。別々の学習器として学んだものを融合させ、それによりまだ学習していないデータの予測能力を向上させることが出来ます。

分類や回帰とは異なる方法と言うのが大きな特徴と言えるでしょう。また、他の機械学習の学習係数を求める場合などに補助的に活用する事が出来たり、幅広い使い道となるのも魅力的な部分になります。

k近傍法

データ分類をする際に活躍する手法です。その名の通り、あるデータに着目した際に近くのk個のデータ平均、または多数決の値を予測し出力します。近場のデータから予測を行うため、精度はさほど低くはなりません。さらに、近隣k個の平均を予測値とするため、直感的で人が理解しやすいというのが大きな特徴となります。

さらに、予測がブラックボックスと多々言われる機械学習ですが、こうした特徴はk近傍法特有の魅力と言えるでしょう。しかし、入力データの次元数が莫大になると精度が落ちてしまうという弱点もあります。データ量によっては、k近傍法を選択すると思うような制度にならないという事が起こってしまいますので注意が必要です。

5・人工知能に学習させる

いよいよ人工知能にデータを学習させていきます。決めた手法を実装していきましょう。ここで重要になるのは、学習させる前にデータを正しく揃えるという点です。人工知能が学習しやすくなるように、事前に不ぞろいのものを整えてあげると、スムーズに学ばせることが出来るようになります。ここで、教師あり学習、教師なし学習、強化学習のそれぞれおすすめのライブラリなどや具体的な活用例についてご紹介致します。

教師あり学習の場合

教師あり学習の場合、Numpy、Scipy、scikit-learnが主に活用されているライブラリになります。Numpy、Scipyは、先ほどお話ししたように、学習前にデータをそろえるために活用する事が出来ます。また、scikit-learnはNumpy、Scipyと非常に相性がいいため、組み合わせた活用をすることによって、機械学習をスムーズに行うことが出来るでしょう。

pythonで教師あり学習が活用できる具体例としては、以下のような種類になります。

  • メールの分類→迷惑メールの可能性が高いメールを判別する事が可能になります。
  • 画像認識→人の顔、動物の顔、男性の顔、など何を示しているか判断が可能となります。
  • 売上予測→店舗の売り上げを規則性に基づき予測が出来るようになります。

メールの分類や画像認識は分類、売上予測は回帰ということになります。

教師なし学習の場合

教師なし学習では、教師あり学習同様にscikit-learnが主に活用されるライブラリになります。機械学習全般に役立たせることが出来るものが一通りそろっているので、pythonを使用する際はぜひインストールしておきましょう。また、教師なし学習の具体例は以下の通りです。

  • 分類に基づく販促→顧客情報と商品データを学習させることにより、「独身女性が買う」「昼によく売れるなどの分類が可能になり、販売戦略を組み立てることが可能になります。
  • 確立に基づく販促→「Aを買った人は〇〇パーセントの確立でBも買う」などの確立を導き出すことで、ネットショップでのオススメや店舗の陳列、セット割引などに役立てることが出来ます。
  • 要因も基づく販促→顧客、商品、その日の天気など、様々なデータを教師なし学習させることで色々な要因が売り上げにどう貢献したかの割合を算出、分析する事が出来ます。
  • 故障検知→他データと一致しないもの、大きく異なるものを瞬時に検出するため、機械の故障を素早く検知したりデータ分析における外れ値の予想をすることが出来ます。

強化学習の場合

強化学習の場合、Dopamine、PFRL、OpenAI Gymなどがオススメのライブラリやフレームワークです。OpenAI Gymは簡単な強化学習の実装が可能で、シミュレーションも出来るため非常に活用しやすいライブラリと言えます。いくつかの学習用ゲーム環境があらかじめ準備されているので、初めてでおスムーズに利用する事が出来るでしょう。

強化学習では、囲碁や将棋などのゲーム、ロボットの歩行学習、自動車の自動運転技術における開発が主な具体例となります。生活に密着した人工知能はこの強化学習で開発されているものが多くあり、自動車やゲームなど、一般的に流通し始めている様々な分野で活用されています。

まとめ

pythonを使用した人工知能の開発は、もちろん専門的知識があればスムーズに行うことが出来ますが、python辞退難しいプログラミング言語ではないため、初心者でも人工知能開発を行うことは十分可能です。活用すベイライブラリや機械学習の手法についての知識を収集し、正しく正確なデータを学習させることにより、人工知能の制度は上がり質の高い開発を行うことが可能となるでしょう。

プログラミングに長年携わっていなくても開発が可能となるpythonの人工知能は、多くの企業でも取りれられ手織り、今後さらに需要が高まるとされています。

プロのプログラマーから初心者まで、幅広く活用する事が出来るpythonで、人工知能開発を始めてみてはいかがでしょうか。

本記事で紹介したライブラリや機械学習の手法について、正しく知識を吸収し、時代の最先端技術をぜひ自分のものにしてください。

システム開発の工程とは?ウォーターフォールモデルやアジャイルモデルなどシステム開発の種類も徹底解説!|注意点や略語も!

発注者の要望に沿ったシステム開発を行う際、ベンダーは様々な工程に分割し作業します。システム開発には様々な手法があり、開発するシステムの特性や発注者の要望によって、最良の手法を選択していく必要があります。

本記事では、システム開発の代表的な手法であるウォーターフォールモデル及びアジャイルモデルについてや、注意点及び略語等を解説致します。

システム開発の工程とは?

システム開発の工程とは、開発を進めていく上の手順のことです。開発を行う上では、工程を分け、分業することで、進捗状況の把握や品質の管理が行いやすくなるというメリットがあります。

システム開発の工程

基本的なシステム開発の工程は、次の通りです。

  1. 要件定義(要求定義)
  2. 外部設計(外部設計)
  3. 内部設計(詳細設計)
  4. プログラミング
  5. 製造・単体テスト
  6. 結合テスト
  7. システム(総合)テスト
  8. 運用テスト
  9. システム移行(リリース)
  10. 運用・保守

本項目では、上記の工程を順に解説致します。

1.要件定義(要求定義)

要件定義とは、開発において一番最初に行うことで、ベンダーが発注者と打ち合わせを行い、開発するシステムに搭載する機能及び仕様、運用フロー等について決定していくことです。

この際、発注者はどのようなシステムが必要なのか、できる限り具体的にベンダーに伝えておかなければ、イメージと違う成果物が完成してしまうことに繋がり兼ねませんので注意しましょう。

また、要件定義は、さらに細かく2つの要件に分類し決定していくことがことが大切です。

  • 機能要件
  • 非機能要件

機能要件

機能要件とは、特に画面及び帳票、バッチ等といった実装するべき機能のことです。

非機能要件

非機能要件とは、開発するシステムの性能といった機能面以外のことです。

2.外部設計(外部設計)

外部設計とは、前述した要件定義の内容を基に、ユーザーインターフェースを設計することです。

ユーザーインターフェースとは、システムの画面等の見た目のことで、発注者にとって使用しやすいシステムを開発するための大切な工程となります。

発注者は、ベンダーとの打ち合わせの際、どのような見た目が良いのか、例えば具体的に流通している既存のシステム画面等を見本としてベンダーと共有することで、イメージの食い違いが起きにくくなるので、覚えておきましょう。

3.内部設計(詳細設計)

内部設計とは、前述した外部設計を基に、実際にプログラミングを行うことができよう、内部に特化した詳細の設計を行うことです。

内部設計における成果物は、「機能仕様書」「データフロー図」「データベース物理設計書」等が挙げられます。これらの成果物の内容は、ベンダー側のプロジェクトメンバー内のみで共有され、発注者と調整を図ることはほぼありません。

内部設計はさらに細かく次の3つに分類できます。

  • 機能分割
  • 物理データ設計
  • 入出力の詳細設計

機能分割

機能分割とは、プログラミング及びシステムメンテナンスを実行しやすくするため、搭載する機能をモジュールごとに分割することで、各モジュールの機能を明確にすることを指します。

さらに、データフロー(機能間でデータが処理される際の流れ)を設計し、データフローを明確にすることで、バグを洗い出すことにも繋がります。

物理データ設計

物理データ設計とは、ユーザーにはわからない、不可視の部分である内部のファイル及びデータのやりとりに関連する部分の設計を行うことです。

入出力の詳細設計

入出力の詳細設計とは、前述の外部設計で決定したインターフェースに関して、プログラミングで実装する際、どのように表現を行うかについて詳細を設計することです。主に「エラー処理」「初期値及びデフォルト値の定義」「入力データのチェック方法」「メッセージ表示」等が検討されます。

4.プログラミング

プログラミングとは、前述した内部設計において作成された「詳細設計書」に基づき、実際にプログラム開発を行うことです。設計書の通り、プログラムを書くことでソフトウェアが正しく動作するようにしていくことになります。

内部設計同様、基本的にベンダー側のみでの作業、情報共有のみが行われます。

5.製造・単体テスト

製造・単体テストとは、前述のプログラミングが完了次第、開発したプログラムが要件定義で定めた通りの動作をするかどうかを確認するためのテストです。

まず最初に、モジュール単位でのテストを実施し、その際バグ等が発見された場合、修正を行なったり、テストの結果のフィードバック等を実施したりしながら、プログラムを完成させていきます。

6.結合テスト

結合テストとは、前述の製造・単体テストにおいて、単体のモジュールに不具合がないことが確認され次第、複数のモジュールを組み合わせ、サブシステムにおいてバグが発生しないか、インターフェーズにズレが生じていないか、各サブシステムの連携がスムーズに行われているか等のテストを実施することです。

7.システム(総合)テスト

システム(総合)テストとは、前述の結合テストにおいて、各サブシステムの不具合がないということが実証された後、全体にバグが発生しないか等を確認するためのテストのことです。

開発したプログラム全てが要件定義通りに動作を行うかどうかだけでなく、アクセス集中時の耐久性及び処理速度のスピード等、様々な視点からテストを実施します。

8.運用テスト

運用テストとは、開発したシステムの納品及びリリース前の最終テストのことです。

ベンダーは、発注者と決定した要件定義に基づいた機能が搭載されているのか、各機能が問題なく動作するかだけでなく、発注者にとって使いやすい仕様となっているか等、実際に運用が始まってから想定できるトラブル及び不具合等が起きないか、起きたとしても対応ができるのかどうかを確認します。

また、発注者側の担当者が、実際の業務と仮定し、運用テストを行うこともありますが、ベンダーのみでテストを行うよりも、実際の使用感等を確認できる良い機会となるため、発注者が了承する場合、実際に発注者側にテストに協力してもらうことが推奨されます。

9.システム移行(リリース)

システム移行(リリース)とは、現行のシステムから開発したシステムに移行させる作業のことです。

システム移行は、既存のシステムの仕様により様々なトラブルが発生することが多く、最も緊張感のある工程であると言えます。

さらに、システム移行の際は、既存のシステムを停止している間に完了しなければならず、時間制限があるため、とても難しい工程だと言えるでしょう。

10.運用・保守

運用とは、開発したシステムの改修及びバージョンアップ等で変更を行うことです。また、保守とは、開発したシステムが滞りなく動作するようにデータ入力を行なったり、トラブル発生時に対応手順書に基づいて処理を行なったりすることを指します。

運用及び保守は、開発したシステムが安定した動作を保つことができるか否かを司る工程となるため、それぞれの担当者同士が連携して実施することが大切です。

システム開発の種類

システム開発には、いくつかの種類が存在します。選択する種類によって、システム開発の工程が変わってくるため、その都度最適なものを選定することが大切です。

特に代表的なものとして、次の4つが挙げられます。

  • ウォーターフォールモデル
  • アジャイルモデル
  • プロトタイプモデル
  • スパイラルモデル

本項目では、上記4つのシステム開発について解説致します。

ウォーターフォールモデル

その名の通り、滝が流れるように、上流の工程をはじめとし、下流の工程まで順番通りにシステム開発を進めていく方法です。

途中で後戻りをしないという特徴があります。

ウォーターフォールモデルの流れ

流れとしては、下記の通りです。

  • システム化企画
  • 要件定義
  • 設計
  • 開発(実装)
  • テスト
  • リリース〜運用・保守
システム化企画

発注者側において、課題及び要求に基づいて、システム化の企画を立ち上げることです。システム化したい業務の内容を分析することで、必要となるシステムの機能や、どのように開発及び導入を進めていくかを決定します。

要件定義

要件定義は最も重要であると言っても過言ではありません。発注者及びベンダーの間で、綿密な打ち合わせを行い、開発するシステムについて、認識のズレが生じることのないようにする必要があります。

設計

発注者の要望を基にユーザーインターフェースを設計する基本設計と、ベンダー側からの視点でシステム設計する詳細設計を行い、システム開発全体の計画を立てます。

開発(実装)

プログラミングを行うフェーズです。

テスト

完成したシステムが不具合なく動作するかをテストします。

リリース〜運用・保守

完成したシステムを発注者に納品し、実際に運用、保守を行っていくフェーズです。

ウォーターフォールモデルのメリット

ウォーターフォールモデルには、様々なメリットが存在します。特に代表的なメリットとしては、次の3点が挙げられます。

  • プロジェクト全体の計画を立てることが容易である
  • 予算及び人員の手配が容易である
  • 開発工程の進捗管理が容易である
プロジェクト全体の計画を立てることが容易である

ウォーターフォールモデルは、上流工程から順に開発を進めていく手法です。そのため、要件定義が策定できた段階で、システム開発のスケジュール全体の把握を行うことが可能となります。

予算及び人員の手配が容易である

要件定義の策定の後、詳細な計画を策定することができるため、プロジェクトメンバーの確保がしやすく、予算も明確に立てることができます。

開発工程の進捗管理が容易である

初期の段階で全てのフェーズで行うべき工程を明らかにし、開発を進めていくため、進捗状況を把握しやすく、万が一のトラブル発生時にも対応しやすいというメリットがあります。

ウォーターフォールモデルのデメリット

ウォーターフォールモデルには、デメリットも存在します。デメリットも把握した上で、開発を進めていく必要があります。

デメリットとしては、次の2点が代表的です。

  • 遡って作業を行うことになると工数が増えてしまう
  • 発注者の意見を途中で取り入れるのが困難
遡って作業を行うことになると工数が増えてしまう

基本的に上流工程から順に作業をし、後戻りして作業をすることはありません。しかし、何らかの理由によって、やむを得ず前の工程に戻り、作業をせざるを得ない場合があります。

その際、システム開発のスケジュールが狂ってしまい、納期が遅れたり、予算おーばーしてしまったりという問題が起こる可能性があります。

発注者の意見を途中で取り入れるのが困難

開発が始まってしまうと、途中で仕様変更を行うこと及び発注者の新たな要望を取り入れるということが困難となります。

そのため、要件定義のフェーズで発注者の要望を網羅し、漏れのないようにすることが必要です。

ウォーターフォールモデルが向いているプロジェクト

ウォーターフォールモデルにおける下流工程では、機能テスト及び結合テスト等、動作確認のテストが複数回実施されます。そのため他の開発モデルと比較し時間がかかってしまうことがありますが、スピード感よりも、高品質が求められるプロジェクトに向いていると言えるでしょう。

アジャイルモデル

ウォーターフォールモデルとは違い、システム開発の工程の最中に、仕様及び設計の変更が当たり前に起こるという前提において、初期の段階から詳細な仕様は決定せず、大体の仕様を決定し、細かいイテレーション(反復)開発及び小さい単位でのシステム実装からのテスト実施を複数回行って、徐々に開発を進めていく手法のことです。

アジャイルモデルの流れ

開発の流れとしては大きく次の3つにフェーズに分けることが可能です。

  • リリース計画の策定
  • システム計画の分割
  • イテレーション
リリース計画の策定

システム開発の途中で、使用及び設計変更が起こりうることを前提に、計画段階では詳細な仕様を決定することなく、大まかな仕様及び要求を決定します。

敢えて大まかに計画を立てておくことで、途中で発注者からの新しい要望が出てきたとしても随時対応することが可能です。

システム計画の分割

大まかに策定されたシステム計画に基づいて、システム全体を構成する各機能を小さく分割し、重要度を把握しつつ開発に着手していく順番を決めていく工程です。

イテレーション

前述したシステム計画の分割で、分割された各機能毎に、要件定義をはじめ、設計及び開発、テスト及びリリースを反復していく工程です。

各機能毎にイテレーションを実施及び反復していくことにより、少しずつシステム全体が開発されます。各イテレーションが完了する度に、検証及び修正が行われ、発注者とベンダーが連携し、他に追加する機能はあるのかどうかをその都度判断していくことになります。

アジャイルモデルのメリット

アジャイルモデルのメリットとしては、開発工程の中で不具合等が発生したとしても、戻る工程が少ないということが挙げられます。

小さな機能毎に開発を進めているため、修正が生じたとしても微々たる影響しかありません。同時に開発途中で発注者に細かく確認を行うことが可能なため、発注者の要望に最大限応えることが可能です。

アジャイルモデルのデメリット

アジャイルモデルにおけるデメリットとしては、開発スケジュールのコントロールを行うことが困難であることが挙げられます。

各機能毎にスケジュールを策定するアジャイルモデルでは、それぞれの進捗状況を把握することが困難でありかつコントロールも困難であると言われています。

アジャイルモデルが向いているプロジェクト

ウォーターフォールモデルと違い、開発途中で仕様の変更及び追加が予想される場合に向いています。モバイル分野等の日々新技術が登場している分野で用いられることが多いです。

プロトタイプモデル

システム開発の初期フェーズにおいて、機能を簡易化した試作機(プロトタイプ)を作成し、発注者に評価してもらう工程を経て、全体の開発工数を減らし効率よく開発を行う手法のことです。

スパイラルモデル

開発するシステムを複数のサブシステム及びフェーズに分割し、それぞれのサブシステム及びフェーズ毎に順を追って開発を行っていく手法です。

なぜ分業するのか

システム開発には、様々なモデル及び手法があることを解説いたしましたが、どのモデルにおいても分業し開発を行っています。

なぜ、システム開発は分業するのかというと、効率よく、より高品質のシステムを開発するためと言えるでしょう。

開発するシステムの規模によっては、開発期間が半年〜数年に渡るものもあります。そのため、開発工程を細かくフェーズ毎に分割することで、プロジェクトメンバー全員の中で、完成システムの認識を一致させやすいというメリットがあるのです。

システム開発工程の注意点

システム開発工程における注意点は、いくつかありますが、代表的なものとしては、次の2点が挙げられます。

  • 不明瞭なコミュニケーション
  • 度重なる仕様変更

本項目では、上記2点の注意点について解説致します。

不明瞭なコミュニケーション

システム開発において、ベンダーと発注者においては、コミュニケーションを密に取る必要があります。

特に初期フェーズの要件定義においては、発注者の要望をしっかり汲み取ることが最重要です。要件定義の時点で、発注者の要望を汲み取れていないと、後々仕様変更等で納期の遅延が発生することに繋がりかねません。

度重なる仕様変更

発注者は要求定義の段階で全ての要望を明確にベンダーに伝えておく必要があります。初期フェーズで仕様変更の要望を出した場合、多少納期が遅れたとしても対応可能なことが多いですが、開発後期であれば、仕様変更=当初の開発予定のシステム自体が変更となることを意味することも少なくありません。

仕様変更の可能性が開発当初から予想される場合には、前述したアジャイルモデル開発を行うことで、仕様変更による影響は少なくなるでしょう。

システム開発に携わる関係者

システム開発に携わる関係者としては様々な役割を持った人がいますが、本項目では下記の代表的な関係者についてご紹介致します。

  • システムエンジニア
  • プログラマー
  • プロジェクトマネージャー
  • プロジェクトマネジメントオフィス

システムエンジニア

システムエンジニア(SE)は、システム開発における要件定義や設計、プログラミング等を担当します。

特に要件定義を確定させることが主な業務となります。

プログラマー

プログラマー(PG)は、システム開発において、プログラミングや各種テストを担当します。

プロジェクトマネージャー

プロジェクトマネージャー(PM)は、システム開発において、プロジェクト全体のマネジメント及び進行を管理します。

システム開発の関係者の中において、数多くの決定権を持つポジションです。

プロジェクトマネジメントオフィス

プロジェクトマネジメントオフィス(PMO)は、システム開発において、人材開発及びコスト調整、ディレクション等を担当します。

プロジェクトマネージャーよりも細かい管理を行うことから、プロジェクトマネージャーの補佐的立場と言えます。

システム開発において覚えておきたい 略語

本項目では、システム開発において覚えておくと便利な略語についてご紹介します。

略語英語日本語訳意味
RDRequirement Definition要件定義システム開発における最上流の工程。発注者の要望を聞き、必要な機能を決定すること。
BDBasic Design基本設計システム全体を機能単位に分割した上で、搭載する機能及び機能同士の繋がりを決定すること。
EDExternal Design外部設計発注者から見える部分の仕様を決定したり、またはシステム開発の費用を設計すること。
FDFunction Design機能設計システムの機能毎に仕様を定義すること。
IDInternai Design内部設計システム内部の動作及び機能等、発注者から見えない部分の設計をすること。
DDDetail Design詳細設計プログラム実装を行う前に、システム内部構成の詳細を決定すること。
PD/PSProgram Design/Program Structure Designプログラム設計機能実装の前に、各プログラムの動作等の詳細を決定すること。
PGProgramingプログラミングコンピュータが理解できる言語によって、実現したい機能を開発すること。
CDCodingコーディングシステムを動作させるためのプログラムを書いたり、発注者から見える文字及び画像をコードで入力したりすること。
UTUnit Test単体テストシステムを構成するそれぞれの持つ機能が正常に作動しているかを確認すること。
ITIntegration Test結合テストシステムの中で単体で作動するようになった要素を、複数組み合わせた際、正常に作動するかを確認すること。
PTProduct Test総合テスト構築したシステムが、必要な機能を全て満たしているかどうかを確認すること。
OTOperations Test運用テストシステム開発のテストのうち、最後に実施されるもの。

まとめ

本記事では、システム開発の代表的な手法であるウォーターフォールモデル及びアジャイルモデルについてや、システム開発における注意点や略語等を解説致しました。

システム開発は、各工程を分割することで効率よく品質の良いものを開発することができるということがわかりました。

ベンダーは、発注者の要望に最大限応えることができるよう、その都度最良の開発手法でシステム開発を行うことで、クオリティの高いシステム開発を行うことができ、発注者にも満足してもらえるように努めることが大切です。

【Pythonの開発環境を構築する方法】AnacondaとGoogle Colabを使用しPyTorchを活用する

主に人工知能(AI)開発に活用されることの多いライブラリPyTorch(パイトーチ)。PyTorchを活用するためには、プログラミング言語であるPythonの開発環境を整える必要があります。しかし、どのように開発環境を整えたら良いのか、特に初心者の方にとっては右も左もわからないということもあるのではないでしょうか。

本記事では、AnacondaとGoogle Colaboratoryそれぞれを使用してPythonの開発環境を構築する方法及びPyTorchを活用する方法について、解説致します。

Anacondaとは

プログラミングであるPythonの開発環境を整える前に、今回使用するAnacondaについての概要を押さえておきましょう。Anacondaとは、データサイエンス向けのプログラミング言語Pythonの実行環境を提供するプラットフォームのことです。基本的には無料で使用することができる上、人工知能(AI)開発及び機械学習等のライブラリを豊富に提供していることから、環境構築を効率よく行うことができるため、利用されることが多いプラットフォームです。

Anacondaのメリット

Anacondaが利用されることが多い理由として、様々なメリットがあることが挙げられます。本項目では、主なメリット4点について解説致します。

  • セットアップが容易
  • 使いやすいソフトも同時にインストールされる
  • 容易に仮想環境が作成可能
  • 必要なパッケージをクリックするだけでインストール可能

セットアップが容易

Anacondaの最も大きいメリットとしては、セットアップが容易であるということが挙げられます。ほぼマウスのクリックのみでプログラミング言語Pythonを動作することが可能な状態まで持っていくことができるので、手間も時間もかからずにセットアップ可能です。

使いやすいソフトも同時にインストールされる

Anacondaでは、1つのソフトだけでなく、Jupyter Notebook等に代表されるプログラミングを補助してくれるような使いやすいソフトも複数同時にインストールされます。右も左もわからない初心者にとっては、嬉しい機能と言えるでしょう。

容易に仮想環境が作成可能

Anacondaでは、容易に仮想環境を作成することが可能です。そのため、仮に仮想環境内でプログラミングがごちゃごちゃになってしまい、やり直したいと思った時にでも、すぐに新しい仮想環境を作成し直したり、仮想環境をコピーして複数作成したりとすぐに軌道修正することができ、初心者でも試行錯誤しながら思い切りプログラミングを行うことができます。

必要なパッケージをクリックするだけでインストール可能

パッケージをとは、プログラミングをする時に使用する便利なプログラムをまとめたものです。Anacondaでは、必要に応じてパッケージを画面操作だけでインストールすることが可能となっており、コマンドライン操作が不慣れな方にとって、とっかかりやすくなっています。

Anacondaのデメリット

前述した通り、とても便利なAnacondaではありますが、メリットがあればデメリットも存在します。本項目では、代表的な主なデメリット3点について解説致します。

  • 動作が重い
  • 不要なソフトのインストール
  • 微調整しにくい

動作が重い

Anacondaにおける最も大きなデメリットとして、Anacondaを動作させるためにPCのスペックを大量消費してしまうことが挙げられます。シンプルなプログラミングを行なっている初心者の頃には大きな問題はありませんが、複雑なプログラミングを行うようになってくると、動作が重くなってくるのを実感してしまうでしょう。

不要なソフトのインストール

メリットの部分で述べましたが、Anacondaは、様々な使いやすいソフトを同時にインストールしてくれますが、その中には実際には使用しないものも含まれています。使用しないソフトは、ただただPCの動作を重くしてしまうだけなので、あらかじめ不要なソフトはインストールしないようにするなど対策して、必要に応じてソフトをインストールするようにすると良いでしょう。

微調整しにくい

Anacondaは、PCの設定を変更する際もあくまでAnacondaを通して行うため、PCで直接なんらかの設定を行うよりも様々な制限がかかってしまい、細かな微調整ができないといった弊害が起こり得ます。

Anacondaのインストール方法

まず初めにAnaconda公式サイト(https://www.anaconda.com)にアクセスし、Anacondaのダウンロードを行います。

画面上部の「Products」をクリックすると、下記5つの選択肢が表示されます。

  • Individual Edition(Open Source Distribution):個人版(オープンソース配布)
  • Commercial Edition(Premium Package Repository):商用版(プレミアムパッケージリポジトリ)
  • Team Edition(On-prem Package Repository):チーム版(オンプレムパッケージリポジトリ)
  • Enterprise Edition(Full Data Science Platform):エンタープライズ版(データサイエンスプラットフォーム)
  • Professional Services(Data Experts Work Together):プロフェッショナルサービス(データの専門家が協力)

5つの選択肢の中から任意の1つを選択しますが、今回は無料で利用することができる「Individual Edition(Open Source Distribution)」を選択し進んでいきます。

「Individual Edition(Open Source Distribution)」を選択後、「Anaconda Installers」まで画面をスクロールします。

「Anaconda Installers」の中では、使用しているOSと環境を選択することができますので、環境に合ったものを選択し、クリックするとダウンロードが開始されますので、任意の場所に保存しましょう。

※Anacondaは、日本語を含むフォルダにはインストール不可能ですので注意してください。関連して、Windowsのアカウント名が日本語になっている場合には、デフォルトのインストール先フォルダ名も日本語になってしまうため、別途フォルダを作成しなければなりません。

次にAnacondaのインストールを行います。任意の場所に保存したファイルをダブルクリックし、起動しましょう。「Welcome to Anaconda〜〜〜Set up」という画面が表示されたら「Next」をクリックします。

その後ライセンスが表示されるので、内容を熟読し問題なければ「I Agree(同意する)」をクリックし、次の画面で現在ログイン中のユーザーのみで使用する場合は「Just Me」、他のユーザーでも使用できるようにする場合には「All Users」を選択し「Next」をクリックし、次の画面では、任意の設定を選択し「Install」をクリックします。(特にこだわりがなければデフォルトのまま進みます。)インストール後、画面が表示されるので「Next」→「Finish」の順でクリックをし完了です。

AnacondaでPyTorch開発環境を構築する方法

Anacondaのインストールが完了したら、Pytorch開発環境を構築していきます。

AnacondaでPythonの仮想環境を作成する

まず初めに、Anacondaでプログラミング言語Pythonを使用可能な仮想環境を作成するために、Anaconda Promptを立ち上げましょう。コンソールが開き次第、下記コマンドで新規の仮想環境「pytorch_env」を作成します。

conda create -n pytorch_env python=3.6 anaconda

もし、上記コマンド入力後「Proceed」と表示されたら「[y](yes)」で進めていきます。その後、作成した仮想環境を下記コマンドで有効にします。

activate pytorch_env

PyTorchをインストールする

次にPyTorchをインストールしていきます。PyTorch公式サイト(https://pytorch.org)にアクセスし、トップページをスクロールしていくと「INSTALL PYTORCH」という見出しがあり、下記項目内の選択肢を使用しているPC及び環境に合わせて設定することができますので、確認しながら設定します。

  • PyTorch Build
  • Your OS
  • Package
  • Language
  • Compute Platform

詳しくは下記記事を参照してください。

各項目を設定した後「Run this Command:」という項目に、設定に準じたコマンドが表示されますので、コピーし、先ほど有効にした仮想環境のAnaconda Prompt上に打ち込むと、PyTorchをインストールすることができます。

テストコードの実行をする

上記工程が全て完了したら、テストコードを実行して、環境構築が成功しているか否かを確認します。まず、「test_pytorch.py」として、下記のコードを保存します。

import torch
print(torch.cuda.is_available())

その後、Anaconda Promptより「Python test_pytorch.py」で実行し、「True」あるいは「False」が表示されるようであれば環境構築が成功しているものと思われます。逆に何かしらのエラーが表示されてしまうといった場合には、環境構築が失敗している可能性が高いため、原因を探し修正して、改めてテストコードを実行してみて下さい。

Google Colaboratoryとは

これまでは、Anacondaを使用してPyTorchの環境構築を行う方法について解説してきましたが、本項目以降は、Google Colaboratoryを使用してPyTorchの環境構築を行う方法について解説致します。

Google Colaboratoryとは、Googleが提供している機械学習の教育及び研究用に作られたプログラミング言語であるPython及び機械学習、ディープラーニングの環境を整えることが可能な無料サービスのことです。略してGoogle Colabとも呼ばれることが多く、Googleアカウントさえあれば、CPU及びGPU(1回あたり12時間の制限)での環境で利用可能です。

Google Colaboratoryのメリット

Google Colaboratoryには、様々なメリットが存在します。中でも代表的な次の3点のメリットについて解説致します。

  • 環境構築がほとんど不要
  • プロジェクトメンバー内での共有が容易
  • GPUを含め無料で使用可能

環境構築がほとんど不要

Google Colaboratoryでは、クラウド上でJupyter Notebookを動作させることになりますが、プログラミング言語であるPython及びライブラリであるNumpy等、機械学習において必要とされるほとんどの環境があらかじめ構築済みです。そのため、Google Colaboratoryを使用するユーザーにとっては、ブラウザだけ用意することになり、迅速に機械学習を行うことが可能となります。

プロジェクトメンバー内での共有が容易

Google Colaboratoryは、Googleが提供しているサービスのため、Google Driveとの連携も可能です。さらにソースコードをクラウド上で管理することができ、さらにGoogle Driveで保存することもできることから、プロジェクトメンバー内での情報共有も容易です。元からのGoogle Driveユーザーであるならば、Google Colaboratoryのノートブックに関しては、直感的な操作によって共有可能であるため、権限管理等も然り、セキュリティ面でも安全に使用できるでしょう。

GPUを含め無料で使用可能

Google Colaboratoryでは、Nvidia社のTesra K80 GPUを無料で利用することが可能です。人工知能(AI)開発における機械学習では、膨大なデータを使用し、高負荷の計算及び処理を実行するため、通常のPCでは、動作が重くなってしまったり、時間がかかり過ぎてしまったりといったことが少なくありませんが、Tesra K80 GPUを利用することで、これらの問題を解決することが可能です。

Google Colaboratoryのデメリット

Google Colaboratoryには、メリットだけでなくデメリットも存在します。代表的な次の2点のデメリットについて解説致します。

  • 特殊な処理方法を覚える必要がある
  • Google Driveの容量で15GB以上は課金が必要となる

特殊な処理方法を覚える必要がある

Google Colaboratoryでは、ローカルPC上で利用していたデータセット等を読み込む際、Google Drive APIやPyDriveのwrapper等を介する必要があるため、慣れない内は手間となってしまいます。

Google Driveの容量で15GB以上は課金が必要となる

Google Colaboratoryは、基本的に無料で使用することが可能ですが、Google Driveの容量で15GB以上使用する場合には、課金を行う必要が出てきてしまいます。しかし、Googleアカウントを複数作成して、Google Driveの容量を確保するといった対策を講じることは可能です。

Google Colaboratoryのインストール方法

Google Colaboratoryをインストールするためには、まずはじめにGoogleアカウントを作成する必要があります。Googleアカウントを持っていないという方は、Google公式サイト(https://accounts.google.com/signup/v2/webcreateaccount?continue=https%3A%2F%2Faccounts.google.com%2FManageAccount%3Fnc%3D1&hl=ja&flowName=GlifWebSignIn&flowEntry=SignUp)にアクセスし、画面に従ってGoogleアカウントを作成して下さい。

Googleアカウントを作成したら、Google Drive(https://www.google.com/intl/ja_jp/drive/)にアクセスし、トップページの「ドライブに移動」をクリックします。次の画面で左上の「新規」をクリックし、表示されたダイアログの中から「その他」→「アプリを追加」をクリックし、画面上部の検索欄に「Colaboratory」と入力し、検索します。その後「インストール」をクリックし、「インストールの準備」という画面で「続行」をクリックし、次の画面で「OK」とクリックし、最後に「完了」をクリックしてインストールが完了となります。

Google Colaboratoryを開く

Google Driveのトップページに戻り、先ほどと同様「新規」をクリックし、ダイアログの中に追加された「Google Colaboratory」をクリックし、Google Colaboratoryを開きます。

Google Colaboratoryのファイル名の変更

Google Colaboratoryの初期ファイル名は「Untitled0」となっているので、任意でわかりやすい名称に変更しましょう。

動作確認を行う

Google Colaboratory上で、コード入力欄に任意のprintコードを入力します。※今回は「Good morning!」と入力しています。

print(‘Good morning!’)

コード入力後左側の「▷」ボタン(実行)をクリックし、下に「Good morning!」と表示されれば問題なく動作しています。

Pythonのバージョン確認を行う

次にプログラミング言語であるPythonのバージョンを確認するために、コード入力欄に下記コードを入力してみましょう。

!python –version

コード入力後左側の「▷」ボタン(実行)をクリックし、下に表示される「Python ○.○.○」がバージョンとなります。

Google ColaboratoryでPyTorch開発環境を構築する方法

Google ColaboratoryでPyTorch開発環境を構築するために、先ほど説明したAnacondaと同じようにPyTorchをインストールし、テストコードの実行まで進みます。

PyTorchをインストールする

Anacondaの手順を参考に自身のPC及び環境に合わせた設定した後「Run this Command:」という項目に、設定に準じたコマンドが表示されますので、コピーし、Google Colaboratoryのコード入力欄に先頭に「!」を追記した上で貼り付けをし、左側の「▷」ボタン(実行)をクリックするとPyTorchをインストールすることが可能です。

テストコードの実行をする

PyTorchをインストールしたら、コード入力欄に下記のコードを入力します。

import torch
x = torch.rand(5,3)
x

コード入力後、左側の「▷」ボタン(実行)をクリックして、下に「tensor()」が表示されることを確認します。

Googleドライブと連携する

Google Colaboratoryのコード入力欄左側にある「ファイル」をクリックし「ドライブをマウント」をクリックし、表示されるダイアログ内の「Google ドライブに接続」をクリックすることで、Google Driveとの連携が完了します。

まとめ

Pythonの開発環境についてということで、本記事では、AnacondaとGoogle Colaboratoryそれぞれを使用してPythonの開発環境を構築する方法及びPyTorchを活用する方法について、解説致しました。

人工知能(AI)開発において欠かすことのできない機械学習を効率的に実施するためには、本記事でご紹介したPyTorch等のライブラリを活用することが近道となります。人工知能(AI)開発において人気のプログラミング言語であるPythonの開発環境を構築し、様々な機械学習に生かしてみて下さい。

【エクセル マクロ作成 完全ガイド】エクセルマクロで出来ること作成方法・メリットやデメリット・活用事例などを一挙にご紹介

「エクセルのマクロって何?」

「マクロって具体的にどんなことが出来るの?」

「知識も経験もないけどマクロって誰でも作成が出来るの?」

業務の効率化を進める上で、必ず一度は聞いたことがあるのがこのエクセルの「マクロ」です。しかし、実際どのようにして活用すべきなのか、そもそもマクロとは一体何なのか、しっかりと深く理解できている方はさほど多くはありません。

本記事では、このマクロの基本的な情報から、活用する事で生じるメリットとはどんなものがあるのか、逆にデメリットは一体何なのか、実際にマクロを作成するためにはどうすればいいのかなどを詳しく解説いたします。

さらに、マクロを活用すべき業種は何か、実際にマクロを活用している企業のリアルな声をご紹介致します。

「業務工数を減らしたい・最適化したい」「負担を軽減し効率的な業務を行いたい」という場合は、ぜひエクセルのマクロ作成を行いましょう。今まで以上に効率よく、かつスピーディな作業を進めるためにも、導入して損はありません。本記事の内容をしっかりと読むことで、マクロはなぜ活用すべき手法の1つなのか、業務効率の改善にいかに役立てるものなのかを把握する事が可能となりますので、ぜひご覧ください。

最後に、エクセルマクロ作成におすすめのYouTube動画もご紹介します。

本記事でご紹介する情報

  • エクセルのマクロは「作業を自動化してくれるためのツール」
  • マクロは機能そのものであり、VBAは使用するプログラミング言語の事
  • マクロは誰でも簡単に作成できコストを抑えた開発が可能
  • ただし、バージョンアップした際には使用できなくなることがある
  • マクロは4段階の工程で作成する事が出来る
  • エクセルを多様に活用している業種はマクロの導入が最適
  • 業種別の活用例
  • マクロを使用する際は登録時と実行時の状態を同じにすることや管理体制が大切

エクセルのマクロとは?

エクセルのマクロとは、一体何なのかについてまずご紹介致します。「マクロってよく聞くけどITの知識が無いからよく分からない」「業務で実際使用しているけど何がどうなっているのか理解できていない」という方も少なくありません。マクロとは、簡単に言えば作業を自動化してくれる1つのツールになります。

エクセル上の作業を記録する事で、それを自動的に実行してくれるのがマクロです。毎日のデータ入力、様々な集計、印刷などのエクセル上で行う全ての作業を自動化する事が可能となっています。

マクロを活用する事で、これまでの手入力から解放され、別タスクへの時間が増加したり、入力や計算ミスなどが大幅に削減できるなどの効果をもたらします。では、そんなエクセルのマクロでは具体的にどのようなことが出来るのか、逆に何が出来ないのかをそれぞれ詳しく見ていきましょう。

マクロで出来る事11選

  1. ドキュメントの作成→納品書や請求書、台帳といった決まったフォーマットの書類であれば、情報を変えることで作成する事が可能になります。請求書の場合、売上管理一覧表などから顧客ごとの請求書作成も出来るようになります。
  2. 紙・PDF印刷→印刷を行う場合、紙の向きやサイズ、部数など様々な設定をしなければいけません。会議資料などのように、決まった部数同じものを印刷するという場合、ボタン一つでその設定を呼び、印刷する事が出来ます。
  3. ワード差し込み印刷→顧客情報は常に入れ替わります。そういった中から現在取引の実績がある顧客のみ、ワード差し込み印刷を使用して印刷物を作成する事が可能になります。
  4. データのチェックや修正→数字やカタカナが半角、もしくは全角出揃っているか、データに空白はないかなどを確認します。仮に空白が見つかった場合、指定数値や文字入力をしたり、半角全角を置き換えることも可能です。
  5. データの集計→売上管理データを、部署、拠点、担当者ごとに集計し一覧表の作成が出来ます。
  6. グラフ作成からパワーポイントへの挿入→よく作成するグラフなどは、設定どおりでいくつも同じものを作成する事が出来ます。また、作成したものをパワーポイントに貼り付けすることも可能です。
  7. ファイルの分割や集約→データ量が増加したワークシートを2つ以上に分割する事が可能です。また、少ないデータの場合は集約することも出来ます。
  8. フォルダの作成と一覧作成→決まった階層のフォルダを一発で複数作成する事が出来ます。また、これまでに作ったフォルダの情報を一覧表としてまとめることも可能です。
  9. メールの一括送信→本文と顧客情報をOutlookを通し一括送信する事が出来ます。
  10. Web情報の収集→求めている情報をWebページから収集し、一覧表にまとめることが出来ます。また、ページのリンク貼り付けも可能です。
  11. データベースの開発→Accessと連携してデータベースの確認や書き換えを行うことが出来ます。

マクロで出来ないこと4選

  1. 大量のデータ処理→マクロは大量のデータ処理には向きません。扱えるデータは容量に限りがあるため、サーバー容量を超えるデータ処理は不可能となります。また、容量内だったとしても処理に時間がかかるという事があります。
  2. Officeソフト以外との連携が不可→Officeソフト間であれば連携させることが可能ですが、それ以外のソフトの場合は連携が出来ません。
  3. デザインが必要な開発は不向き→マクロは自動化が主な機能です。そのため、デザインが必要となるアプリの開発には不向きとなってしまいます。
  4. 誤動作時の対処方法に注意が必要→誤作動で処理が止まらないという現象が発生します。この際、「Esc」を押せば処理の停止が出来ますが、誤って電源を切ってしまうなどすると、作成していたデータがすべて消えてしまうという事があります。

上記の内容を見てもらえれば分かる通り、もちろんマクロでできないこともありますが、マクロを使用する事で出来る事と言うのは非常に多くあります。上手く活用する事で、今の業務に対する作業時間を大幅に短縮し、業務の効率化をスムーズに行うことが出来るようになるでしょう。

また、時間を短縮する事で他作業へその時間を割り当てることも可能になったり、残業をなくし定時退社が常に可能な体制を整えることも出来るため、会社全体の成長も実現するでしょう。

マクロとVBAの違い

エクセルのマクロとよく混同されがちになるのが「VBA」です。この2つの言葉を同じ意味として使用しているという方も多くいるのではないでしょうか。同じ意味として使用しても、大きく間違っているという事ではありません。しかし、細かく言うと厳密には異なるものになります。先ほどもお話ししたように、マクロはエクセル上での作業を自動化する機能になります。

一方「VBA」とは、マクロを作るためのプログラミング言語の事です。マクロは機能そのものを指し、「VBA」はマクロの処理をするためのプログラムという違いがあります。

マクロの活用をする場合、「VBA」の知識を有していればより高度な作業も自動化する事が可能になります。ですが、「VBA」を活用したいという場合には、まずはプログラミング言語について学ばなければいけません。もちろん使用が可能となればより効率よく業務の自動化を進めることが出来ます。しかし、その為にはかなりの時間と手間がかかってしまうでしょう。

「とにかく今は簡単な作業だけを自動化できればいい」「プログラミングに関する知識はないけどマクロを使用してみたい」という事であれば、本記事で後程紹介する作成方法を実践してみて下さい。

マクロ活用のメリット

様々な作業を自動化する事が出来るマクロですが、実際活用する事でどのようなメリットを得ることが出来るのか、まだ使用していなければ何となくなイメージしかつかめないという方も少なくありません。そこで、ここではマクロを使用する事で生じる3つのメリットについて、詳しくご紹介致します。

メリットについての把握が出来れば、現状抱えている課題や問題を解決するための糸口にもなり得るでしょう。より深く知るためにも、まずは活用する事で得られるメリットについてしっかりと理解しておくことが大切です。

コストが安い

マクロは、エクセルに標準装備されている機能です。そのため、マクロを活用するために有料のソフトを購入したり、開発会社などと契約を交わすという必要はありません。エクセルの購入が済んでいればそれだけで活用する事が可能になります。

また、エクセルを起動できる環境さえあれば運用にも問題はないでしょう。そのため、開発のためのコストや運用するためのコストも安価で済むため、大きな予算も必要がありません。

システム開発が簡単に出来る

簡単にシステムの開発が可能という点が大きなメリットになるでしょう。企業によっては、ITに関する知識はもちろん、システムの開発などと言った専門的分野に対する知識は乏しいという方も多くいます。しかし、マクロは特別な知識や経験、スキルなどが無くても、誰でも簡単にシステムの開発をすることが出来るため、今の自社の開発スキルでも十分業務の効率化を図ることが出来るでしょう。

仮に「IT知識はないけどこれからいろいろと勉強していきたい」と考えている方がいるのであれば、まずはこうしたマクロの作成から入り、少しずつ知識を高めていくということも出来ます。先ほどお話ししたように、エクセルさえあれば簡単に作成できるため余計なコストをかける必要もありません。勉強のためにマクロの作成を行うというのも、それもまた1つのスキル向上のための手段となります。

作業者の負担を軽減できる

やはり一番のメリットと言えるのが、作業者の負担を大きく軽減できるという点です。マクロで自動化する事により、手作業では起こりがちなミスも防ぐことが出来ます。さらに、作業時間、作業工数をうんと短縮する事が可能になるため、事務処理全体の効率を上げることが実現できます。

繁忙期などは「この作業が終わらないと帰れない」「明日までに完了しなければいけない処理が山積みで会社に泊まる」なんてこともあるかもしれません。サービス残業や仕事の持ち帰りを経験した方も少なくはないでしょう。マクロを活用する事で自動でデータ処理や集計をすることが出来るため、こうした働き方も改善され、無理なく業務を進行していく事が可能になります。

マクロ活用のデメリット

マクロは様々なメリットが得られますが、当然デメリットもあるという事を把握しておかなければいけません。どんな機能やツールでも、メリットのみではないという事は頭に入れておきましょう。それはマクロも例外ではありません。しかし、事前にデメリットに関する知識を持っているだけで、もしもの時に正しく迅速な対応をすることが出来ます。何も知らず慌ててしまうことが無いように、しっかりとデメリットについても把握しておきましょう。

バージョン変更時に利用できなくなる

マクロはエクセルのバージョンが変更になった際、古いバージョンで稼働していたものが動かなくなってしまうという事があります。もしもそのシステムを作成した人が退職してしまっていたり、異動で他支店に移ってしまっていたりなど、その場で処理が出来る人がいないという場合、そのシステムそのものが使い物にならなくなってしまうでしょう。

複数人による同時編集が不可

マクロはエクセルの標準機能です。エクセルは複数人での同時更新が出来ません。共有ブックにするというのも1つの解決方法になりますが、予期せぬトラブルなどが発生する事があります。そのため、同時進行で行わなければいけないという場合には、マクロではなく他システムの導入を検討する方がいいでしょう。

処理速度が遅くなることがある

先ほど「マクロで出来ないこと」でもお話ししましたが、データ容量には制限があります。容量を超えるようなデータの処理は不可能ですし、容量内であっても、それが複雑な処理の場合、マクロのシステムだけで補う事が出来なくなってしまうでしょう。自動化する事で効率よく作業を進めることが出来るのがマクロの大きな魅力ではありますが、データの量によってはシステムが重くなり処理が非常に遅くなってしまうという事があります。

エクセル・マクロ作成の方法

ここで、知識や経験がなくても開発が可能なマクロの作成方法について詳しくご紹介を致します。この方法であれば、開発やプログラミングに関する知識が全くないという方でも、問題なくマクロの作成をすることが出来るでしょう。

ここで1つ注意しなければいけないのが、「Officeオンライン」ではマクロの作成が出来ません。マクロの作成が出来るのはインストールされたエクセルのみとなります。Officeオンラインはインストール版と比較すると様々な制限が課せられていますが、マクロが使用できないというのも1つの制限となりますので、マクロの作成を行う場合は、オンラインではなくインストール版を使用するようにして下さい。

1・マクロの記録をスタート

まずはエクセルを開き、開発タブにある「マクロの記録」をクリックします。また、表示タブからマクロを選択し、「マクロの記録」をクリックするという流れでも行うことが可能です。ここで開発タブが表示されないという場合には、ファイルタブからオプションを選択し、リボンのユーザー設定を選び、メインタブにある「開発」にチェックを入れて下さい。これで開発タブが表示されるようになります。

2・記録したい内容を操作

まずは記録させる手順について事前に確認しておくといいでしょう。ダイアロゴボックスにマクロ名を記載しOKを押すと、それ以降の動作が登録されていきます。マクロ名はそれぞれ作成すべきシステムの名前を付けて下さい。「〇〇集計」「〇〇一覧」など、マクロに覚えさせた作業が分かるような名前にします。

もしもマクロの記録を間違えてしまったという場合、開発タブからマクロを選択し、ダイアロゴボックスの中にある「削除」をクリックすれば記録したマクロを消去する事が出来ます。

3・マクロへ記録し終了

エクセルのタブ部分に「記録終了」という表示があれば、記録がスタートしているという事になりますので、必ず確認してください。もしも記録終了が表示されていないという場合は、もう一度最初の手順から行ってみましょう。記録終了の表示が確認出来たら、記録させるべき作業を実際に行ってください。ここで行った作業が全て記録され、マクロのシステムが完成します。作業が終わったら「記録終了」をクリックしてください。

4・記録したマクロを実行

最後に、実際に今登録したマクロのシステムを動作させてみます。マクロの実行をしたい部分にカーソルを合わせ、開発タブからマクロを選択します。今登録したシステムが表示されるので、それを選択して実行を押します。これで問題なければマクロの作成は完了となります。作成したマクロの手順確認をしたいという場合、開発タブからマクロを選び、そこから編集をクリックする事で実際のプログラムをチェックする事が出来ます。

これが、マクロ作成の基本の流れになります。特別難しいことはなく、この手順通りに進めていけば登録する作業が変わっても問題ありません。いろいろと試していく事で、よりマクロに対する理解も深まり、自分自身のスキルを向上させることにもつながるでしょう。

マクロを活用すべき業種とは?

エクセルのマクロは様々な業界、業種で活用する事が出来ます。しかし、その中でも特にマクロの活用をすべき業種があるのをご存じでしょうか?もちろん、どの業種でも使用できるものではありますが、業務の作業負担を飛躍的に軽減し、よりよい作業環境を整えることが出来る業種があります。それが「事務・経理」と「プログラマー・SE」です。

今現在、この業種でマクロを取り入れていない企業があれば、ぜひ注目して見て頂きたい内容になります。なぜこの2種がマクロの活用をすべきなのか、今以上に何がどう変わるのかをご紹介致しますので、現在の業務と比較し、何がどの程度改善されるのかをしっかりと比較してみて下さい。

事務・経理のマクロ活用

エクセルを中心として、様々なOfficeソフトを日々活用しているのが事務や経理の方々です。データ集計に用いるのは主に関数ですが、それでも作業の中には「この工程は必要なのか?」と無駄に感じてしまうようなものもいくつもあるでしょう。

そこで、マクロの活用を行う事により、特定の作業を自動化したり、データベースからデータ抽出を自動で行うことが出来たり、関数の自動計算をしたりなど、多くの事が実現可能になります。事務や経理の業務は、そのほとんどがエクセル上で行うものとなりますので、業務全体を通してみても、他業種に比べて大幅な作業の効率化を可能にすることが出来るでしょう。

プログラマー・SEのマクロ活用

システムの開発を行うプログラマーやSEは、コーディングだけではなく様々な場面でエクセルを活用した資料作成を行うという事があります。特にSEの場合、開発プロジェクトの要件定義、仕様設計から関わるため、数多くの資料をエクセルで作成する事になるでしょう。

障害の自動計算、テストケース作成など、マクロを活用すべきケースは非常に多くあります。さらに、コストなどの関係から、システム部門で内製化しやすいマクロでシステムの開発をすることで、大幅なコスト削減をすることが出来るでしょう。プログラマーやSEであれば、VBAの知識もあるため、より複雑な方法での活用も実現できるため、今まで以上の効率化を図ることが出来ます。

マクロの活用事例

普段の業務に取り入れることで様々な業務の改善を行えるマクロ。実際の業務でどのように活用されているのか、また、活用する事でどういった改善がなされたのかなど、ここでリアルな活用事例をご紹介致します。

経理・人事・管理職の活用事例

先程もお話ししたように、様々な計算で日々エクセルを活用する人事や経理、または管理職の方こそ、マクロの活用は業務を効率化させるのに有効です。いきなり複雑なマクロの作成が出来ずとも、まずは部分的な作業から自動化を取り入れるというのも1つの手法になるでしょう。

コンサルティング会社:人事課これまでは従業員の給与から算出された住民税を都道府県や市町村別で手動計算をしていたが、自動計算を取り入れたことで手間が減りミスもなくなった。
不動産会社:経理課およそ2週間勉強し、マクロで「旅費精算表作成プログラム」の作成が出来た。手入力をしなくても社員それぞれの旅費を自動で集計し計算できるようになった。
食品販売会社:総務部顧客情報の性と名の間が空欄があったり、数字が全角だったりと整形作業が手間だったが、今ではマクロが自動で整形してくれるため美しい宛名印刷も可能となり顧客の増加にもつながった。

営業・マーケティング職の活用事例

売れ筋商品分析、データの報告など、日ごろからエクセルを活用している営業部も多いのではないでしょうか。マクロが最も得意とする分野が、こうした定型化されたデータの処理です。毎回の操作にかかる時間と手間を考えれば、ある程度の工数をかけてマクロの作成をしてもその費用対効果は高くなるでしょう。

化粧品メーカー:マーケティング部消費者の動向調査データや店舗・地域別の売上データなど集計済データの扱いが多いがデータが重くなっていくため別のファイルに保存してから削除するよう自動化。データが軽くなったことはもちろん、不要なファイルと必要なファイルの区別もつくようになった。
アウトソーシング会社これまでは、各支店長への次月データ配信を翌月の15日ごろに度々催促されていた。しかし現在は基幹システムからデータを取り込んで、各支店や事業部の次月売上や利益表をエクセル上に自動作成できるようにした。その結果10日ごろには余裕をもって配信が出来るように改善された。

製品開発・品質管理・製造管理職の活用事例

製品の製造を行うたびに、または実験するたびにデータは蓄積されていきます。日々膨張するこうしたデータをスピーディかつ手軽に統計するためにも、マクロは非常に有効です。ITはもちろんですが、非IT系技術者や開発者の方にも、手軽なツールの1つとして導入をオススメします。

電機メーカー研究所数万の実験データから熱容量や気泡の計算を、エクセルでデータを手入力する事で行っていた。この作業におよそ1か月という期間が必要だったが、マクロ活用後は2~3日で分析結果の提出が可能となった。さらに、結果を自動でグラフに出来るため、多くの研究者から喜ばれている。
食品メーカー製造管理マクロは、製品別の最新日付データの抽出と、その一覧表作成で取り入れている。一般の機能で行っていた作業をマクロにより自動化し、作業範囲を新しいワークシートに書き出すようにしただけだが、これでも大幅な時間の短縮が可能となった。今後もより使いやすくできるようにしていきたい。

エクセル・マクロ使用の際の注意点

エクセルのマクロ作成のメリットやデメリット、具体的な作成方法を正しく理解した上で、マクロを使用するための注意すべき項目についても把握しておく必要があります。ここで、マクロ使用の際の注意点3つをお伝えいたします。そもそもマクロは、「VBAを使用した方法」「マクロの記録」の2つの方法で作成するという事を前提としてしっかり頭に入れておいてください。

繰り返しになりますが、マクロの記録とは、「作業の開始から終了までの捜査を覚えさせ自動的に行う機能」です。注意点を正しく理解するためにも、この事をまずはしっかりと覚えておくようにして下さい。

保存する時の状態と保存方法に気を付ける

エクセル マクロの記録は、記録をする時と動作させる時の状態をそろえる必要があります。マクロの記録をする際は、実際に一度作業をする必要がありますが、その後正常に稼働させるためには、ファイルやシート、セルなどを同じ状態にしておかなければうまく稼働させることは出来ません。記録時は上手くできたのになぜかその後作動できないという事が発生すれば、もしかしたら何かしら状態に異なる部分があるという事ですので注意してください。

また保存方法ですが、マクロに記録をした場合、通常のファイル形式では保存する事が出来ません。保存する場合は、必ず「マクロ有効ブック」にする必要があります。これに変更すると、拡張子が「.xlsm」になります。通常の場合であれば拡張子は「.xlsx」ですので、保存の際にはこの違いをよく確認しておくようにして下さい。

まずは予行演習を行う

マクロに作業の流れを記録する場合、事前にその流れをしっかりと予行演習しておくことが大切です。一連の流れが単純で簡単なものであれば問題はありませんが、覚えさせる作業が複雑なものの場合、記録途中に迷子んあってしまったり、誤った方法で完了させてしまうという事がありますので注意してください。まずは予行演習を行い、流れを正しく自分自身が覚えてから記録するといいでしょう。

徹底した管理をする

徹底した管理を行わない場合、マクロはブラックボックスと化してしまうでしょう。マクロの作成や設定など、全てを誰か一人に一任したとします。メンテナンスなどもすべてその人のみに任せている場合、例えば退職や異動などで現場から離れてしまえば、支障が出ることは目に見えて明らかでしょう。

さらに、管理不足によりシート名を書き換えてしまったためにマクロが作動しなくなったり、誤って削除してしまうという事もあり得ます。今まで自動化できていたものが急にできなくなってしまっては、そのダメージは想像以上に大きいものになるでしょう。

そのため、まずはマクロに関するルールや注意点の周知徹底、ファイルやシートの名前を文章化してはっきりと明確にしておく事が重要です。部署の誰でも操作、メンテナンスを行えるように徹底した管理を行い、イレギュラーな事態が起きてもスピーディに対処できるようにしておきましょう。

まとめ

エクセルのマクロは業務の効率を上げるために欠かせない最適なツールと言えます。例えば、これまではエクセルで数時間かけていた作業であっても、登録をするだけでその作業をクリック1つで瞬時に行うことが出来るようになります。

エクセルのマクロを作成し使いこなすことが出来るようになれば、色々な作業を自動化して業務の正確性と迅速な対応が実現できるようになります。仕事を行う上で時間の短縮は気持ちのモチベーションを上げる事にも繋がるでしょう。さらに、VBAの理解を深めることでより複雑な作業も自動化し、より効率よく作業を進めることも可能となります。

システム開発アプリ開発のように、どうしても外注先でプロに依頼しなければ出来ないというものではありません。本記事でご紹介したように、正しい手順で行えばITの知識がなくても簡単に作成する事が出来ます。

まずは単純な作業に対するマクロを作成し、少しずつ慣れていくことをオススメします。気が付いた時には、スキルも知識も上がり、自分自身のレベルを高めることも出来るようになりますので、ぜひどんどん作成し取り入れていくようにしましょう。

エクセルマクロ作成 おすすめYouTube動画

エクセルマクロ作成・VBAについて、概要を理解したい方にオススメのYouTube動画です。

エクセルマクロ作成・VBAについて、実際の事例を用いて解説されているYouTube動画です。エクセルマクロ作成って?という超初心者の方から、具体的にマクロ作成したい、VBAの理解を深めたいという方に非常にオススメです!

エクセルマクロ作成の超入門という事で、非常に分かりやすく体系的に初心者から既にマクロ作成について概要は理解しているという方まで理解を深めるために役立つYouTube動画です。パソコンスキルの教科書という、チャンネル名の通り仕事で使う実践的な動画が盛りだくさんです。

【システム開発・支払い】トラブルの原因で最も多いと言われる支払いは、どのタイミングで行うのか?支払い方法や安く抑えるポイントと共に実際の裁判事例などを徹底解説!

システム開発は契約書通りに進めていけばトラブルはおきない」

こう考えている担当者は珍しくありません。しかし、その契約書の内容は正しく把握できていますか?特に重要となるのが支払いに関する項目です。

契約書内容に同意していても、後から「こんなこと知らなかった」という事は珍しくありません。それは、多くの方が契約書の内容を流し読み程度でしか確認しておらず、形式的なサインをして開発が始まってしまうためです。

「着手金の支払いは納得していたけど50%も払うなんて聞いていない」

「システム開発が完了したのになぜか支払いがされない」

後になってこうしたトラブルに見舞われないためにも、システム開発に関する支払いについてしっかりと情報を収集しておきましょう。本記事では、支払いの方法や契約形態ごとの支払いタイミング、開発費用の内訳などを徹底的にご紹介致します。

本記事の内容を把握ししっかりと理解する事で、無駄な争いをなくしスムーズなシステム開発の依頼が行えるようになります。また、記事最後には実際の裁判事例もご紹介しておりますので、ぜひご覧ください。

支払いタイミングの基準は「検収合格日」

システム開発における支払いタイミングとは、主に「検収合格日」を基準としていることがほとんどになります。具体的には、「検収合格日から〇日以内の支払い」「検収合格をした月の翌月末」など、検収合格日に基づいて支払期日が決定される事になります。こうした取り決め自体には何ら問題はありませんが、中には検収期間が長く設定されているという事もあります。

その分支払いのタイミングも長引くという事になりますので特に注意しておきましょう。仮に、「検収期間が30日間・検収合格日翌月末の支払い」という場合で見てみましょう。

システム開発を行い納品日が4月10日だった場合、検収期間が30日間となるので、検収合格日は5月10日という事になります。支払いは合格日の翌月末となっているため、報酬支払い日は6月30日になります。

このように、納品すれば報酬の支払いが行われるという事ではなく、実際にその支払いは作業を行ってからおよそ3か月後という事になります。また、上記の説明は検収に一発合格した場合の支払い日となりますので、例えばここで何かしらの問題が発生し、修正などが発生した際にはさらに修正作業が必要となりますので、受注側は修正が完了するまで報酬の受け取りは出来ません。

こうした場合、もしも報酬の支払いが遅くなることに不都合が生じる場合、発注側と受注側で事前に打ち合わせを行い、支払いに関して細かく取り決めを行うようにしましょう。検収期間を短くする、検収合格から支払いまでの期間を短くするなど。双方でしっかりと話し合い決めることが大切です。基本的には「検収合格日から支払日が決まる」という流れになりますので、この部分の話し合いを行われなければ、納品から数か月先の支払いとなる場合もありますので、よく確認するようにして下さい。

また、仮にシステム開発の契約が下請法の適用を受けるという場合、支払いは検収合格日ではなく納品から60日以内という事になります。そのため、この支払のタイミングに関する項目は、受注側、発注側双方にとって特に重要視するポイントと言えます。相違がないように事前にしっかりと綿密な打ち合わせを行いましょう。

システム開発の「検収」とは?

システム開発の「検収」とは、納品された成果物が発注した通りのものとなっているかどうか確認する作業になります。簡単に言えば、受注側が発注側に対して「作業が完了しました。ちゃんとできていますか?」とシステムを提出し、発注側が「確かに受け取りました。」とOKを出すことです。納品されたものをチェックし、修正の必要はあるか、仕様通りに出来ているかを見て、大丈夫であれば検収合格となり、そこで初めて支払い日が決まります。

「検収」と「納品」の違いとは?

IT業界に限らず、この「検収」「納品」という言葉はビジネスの世界ではよく耳にします。同じような意味に感じている方も多くいますが、実際は大きく意味が異なる場合がありますので、注意しておきましょう。

まず納品ですが、これは発注側に実際にシステムを渡すことを指します。この場合、システム開発では基本的にありませんが、受け渡しと支払いが同時の場合は納品という言葉はあまり使いません。大型家電や家具などのように、まずはお客様から商品代金を頂き、後から配送して商品本体をお届けする、これを「納品」といいます。支払いタイミングが前後することはありますが、このように、支払いタイミングと受け渡しが異なる場合が納品です。

では、検収とは一体何なのか。システム開発に限らず、検収とは「納品されたものに問題がないかチェックを行いOKをだす」という事になります。そのため、システム開発の場合は、まず受注側が開発を行ったものを発注側に「納品」します。その納品されたものをチェックし「検収」を行います。OKが出れば、その日が「検収合格日」という事になります。

契約形態によって支払いタイミングは異なる

支払いタイミングは、契約形態により異なるという事はご存じでしょうか。システム開発の契約形態は、「請負契約」「準委任契約」の2つに分けられます。2つの契約形態は、業務に関する義務や成果物に関することなどの大きな違いがありますが、支払いに関する内容も異なっている場合がほとんどです。では、請負契約、準委任契約の支払いタイミングはいつになるのか、どのような支払いになるのかを詳しく見ていきましょう。

【請負契約】

請負契約の場合、成果物が完成していなければ受注側は報酬の受け取りは出来ません。請負契約とは、仕事を完成させるということを約束し、その対価としての報酬の支払いが生じるという契約になります。

そのため、当然成果物がなければ報酬の発生もありません。いくら長い期間開発を行っていたとしても、完成していなければ1円も報酬は受け取れません。請負契約では、先ほど本記事でご紹介したように、「検収合格日」を基準とした支払いが行われることがほとんどです。

成果物を納品し、検収を経て報酬が発生します。そのため、納品してもすぐに支払いが行われるという事ではありません。非常に極端な話にはなりますが、未完成のままで関係が破綻してしまった場合、報酬が支払われるどころか訴訟問題に発展する事もあります。後程詳しくご紹介致しますが、報酬の「前払い」などもありますので、契約書作成時や打ち合わせ時などにしっかりと報酬の支払いについて必ず協議をしておきましょう。

【準委任契約】

準委任契約では、請負契約とは違いシステム完成が目的にはなりません。システムの完成、未完成問わず、業務を行った分の時間給が報酬として支払われます。準委任契約の場合、項目ごとに依頼を行っているという事がほとんどになりますので、その手持ちの仕事が完了した時点で報酬が発生します。

この際、当初の契約時において予定していた工程が最後まで行われていたかどうかがポイントとなります。請負契約の場合では、システムが完成し納品を行い、検収合格日から報酬の支払い日が決まりますが、準委任契約の場合、多くは工程が完了した際に、当初の取り決めにより決定した日付で報酬の支払いが行われます。

契約書で「終了した1週間後」となっていれば、業務終了した日から1週間で報酬の支払いが行われ、「終了した日の月末」となっていれば、その月の末に支払いが行われるという事になります。

システム開発の内訳・相場は?

システム開発における内訳や相場は、そのプロジェクトの規模やシステムの難易度によって大きく異なります。また、契約によっては着手金や前払いなどの発生もありますので、こうした支払いについては必ず協議しておきましょう。

システム開発で多くのトラブルは支払いに関するものとなります。そのほとんどが、認識の違いや理解の不十分さが原因ですので、余計な争いを回避するためにも、システム開発の内訳や相場について、しっかりと把握しておきましょう。

着手金・前払い金について

システム開発の依頼を行う場合、着手金の支払い、もしくは費用の前払いなどを行うべきなのかという疑問を抱える方も多くいるでしょう。本記事の冒頭でご紹介したように、費用の支払いは基本的に検収合格日が基準となりますが、契約内容によっては着手金や前払いなどが発生する事があります。それぞれについて、詳しくご紹介致します。

着手金とは

IT業界に関わらず、様々な業界で聞く着手金ですが、基本的に仕事を開始するにあたり材料や資材などを購入する必要があるモノの場合、着手金の発生は当たり前にあります。代表的なのが建築業界です。建築物を建てるために、まずは資材を準備する必要がありますが、そこに宛てられるのが着手金です。

では、システム開発の場合はどうなのか。建築業界などとは違い、システム開発の場合は仕事を開始するにあたり準備すべき資材などはありませんので、着手金の発生はあまりありません。しかし、全くないという事ではありませんので注意してください。着手金の支払いを行う事で信用を得るという企業も少なくありません。平均的に開発にかかる費用の30%程度が相場となりますが、中にはおよそ50%ほどの着手金の支払いが必要という事もあります。

複数回依頼をしている場合は着手金がなく、初めての契約の際にのみ着手金が発生するという事もあります。また、最終の支払い時に着手金を相殺して改めて金額を出すという企業もあれば、一括で支払いを行った後着手金を返還するという方法を行っている企業もあり、それぞれの着手金に対する意識は異なります。基本は着手金はあまり発生しないという事の方が多いですが、契約段階でしっかりと打ち合わせを行い着手金についての認識を合わせるようにしましょう。

前払い金とは

前払い金は、その名の通り仕事を開始する前に支払いを行うという方法です。ですが、請負契約の場合、民法632条により、受注側が仕事の完成を約束し、発注側が完成した仕事に対して報酬を支払うという契約になります。前述した着手金などがある場合もありますが、費用を一括で前払い要求するという事は基本的にありません。約定により、開発費用に充てるために前払いを行うという事もありますが、原則としては後払いでの支払いという事を頭に入れておくようにしましょう。

フリーランスのエンジニアなどにシステム開発依頼を行った場合、条件として一括前払いを要求されるという事は少なくありません。この倍、契約形態は準委任契約となることがほとんどですので、成果物の有無問わず報酬は発生します。しかし、前払いを行うか、作業終了後に支払うかという点は、必ず契約書に明記するようにしなければいけません。比較的に規模の小さい開発の場合、前払いが用いられるという事があります。

基本的に、契約書に前払いの内容の記載がなければ、報酬の支払いは一般的な後払いとなります。双方で納得して前払いを行うという場合は、契約書にその旨をしっかりと明記し、支払時期に対しての相違がないようにしておくことが重要です。原則は後払いとなるという事をお話ししましたが、絶対に前払いが出来ないという事ではありません。傾向としてはかなり少なくなりますが、実際に前払いを要求するフリーランス、開発会社も存在しますので、後々のトラブルを回避するためにお、必ず内容を細かく契約書に盛り込み、何度も確認を行うようにしましょう。

中間金とは?

中間金は、契約の成立から完了までの中間地点で支払われる報酬の事です。前払いや着手金同様に、中間金の支払いについては契約書で必ず明記を行う必要があります。先ほどもお話ししたように、民法632条で報酬の支払いは完成した仕事に対して行われるという旨があります。そのため、契約書に記載がない場合、この民法が適用されるため中間金の支払い義務はありません。

中間金の支払いを契約書に盛り込む場合、その支払いタイミングについてもしっかりと明記するようにしましょう。設計が完了してからの支払いになるのか、製造後の支払いとなるのかなど、前もってどのタイミングでの中間金支払いが生じるのかははっきりとさせておく必要があります。契約書に記載がある以上は、中間金の支払いがないと次の工程へ進むことは出来ません。設計と製造の間に支払い義務が生じる場合、支払いが行われなければ製造過程に入りません。また、製造後の支払いとなっている場合、そこで適切な中間金の支払いがなければテストに入ることは不可能となります。

中間金だけではなく、先ほどご紹介し着手金や前払いも例外ではありません。全てにおいて、最も重要となるのは「契約書にあるかどうか」という点です。システム開発ではこの契約書が非常に強力な存在となりますので、どんな些細な事であっても、細かく明記することが重要と言えるでしょう。支払いに関するトラブルは非常に多くありますが、そのほとんどはこの契約書の作成が不十分であってり、双方の認識の違いが多くありますので、回避のためにも契約書の作成に注意して進めていきましょう。

費用は主に「人件費」

システム開発における費用は、その規模により数百万円以上かかるという事は珍しくありません。その内訳として、主となっているのは人件費です。システム開発はエンジニアが1人で行うというものではありません。SEやPG、PMなど、様々な担当者がチームを組み行っていくものです。そのため、システム開発ではこの人件費が主な費用となり、大規模なプロジェクトになればなるほど人数も多くなるため、必然的に費用も高額となっていきます。

新人システムエンジニアおよそ60~100万円程度
中堅システムエンジニアおよそ80~120万円程度
上級のシステムエンジニアおよそ100~160万円程度
大手所属のプログラマーおよそ50~100万円程度
下請け、もしくはフリーランスのプログラマーおよそ40~60万円程度
外国籍プログラマーおよそ30~50万円程度

上記が開発者・システムエンジニア・プログラマーの主な単価の相場となります。もちろんこれ以上の価格、これよりも低くなるという事は十分あり得ます。また、費用の内訳には設備費も忘れてはいけません。1つはシステム開発をするための設備費用、もう1つがシステムを動かすための費用となります。

開発するためのパソコンがない場合はリースをしなければいけません。さらに、開発するためのスペースがなければオフィスを借りるという事も必要でしょう。また、自前でサーバを用意するならその費用も掛かります。人件費のみではなく、こうした設備費にもしっかりと目を向けておきましょう。

「人月単価が高い」=「質が高い」は間違い

先ほどの相場一覧のように、レベルや業種により一般的な単価は異なります。数十万円以上の差がありますが、スキルの高さと単価の高さが必ずしも比例するという事ではありません。システム開発を依頼する際は、大手の開発会社を中心として子会社や委託会社などに依頼するケースが多くあります。このような場合、自社の利益幅を確保するためにあらかじめ高めの人月単価を設定しているという事は珍しくありません。

そのため、費用が高いからシステムは質のいいものが出来るという考えは間違いと言えます。また、大手だから安心、名前の知られている企業であれば心配ないと安易に発注先を決めてしまうと、同じクオリティなのに費用のみが高額になってしまうという事もあるでしょう。

また、企業規模が大きければ大きいほどに間接費が高くなります。そのため、システム開発費用をなるべく抑えて発注をしたいという場合には、大手の開発会社ではなく、あえて中小規模の開発会社へ依頼を行うというのも1つの手法と言えます。

システム開発・主となる支払い方法

システム開発における費用の支払い方法は、一括払い、分割払い、マイルストーン払いが主となります。一括払いについては特に説明する必要はないでしょう。簡単にまとめると、システムの開発が行われ検収に合格した後に費用を一括で支払うという方法となります。では、分割払いやマイルストーン払いとは具体的にどのような支払い方法となるのかについて、詳しくご紹介致します。

マイルストーン払い

そもそもマイルストーンとは、プロジェクト完遂に重要となる中間地点の事を指します。1つのプロジェクトのマイルストーンは1つだけという訳ではありません。例えば、企画書の決定までがマイルストーン、要件定義まで行けばそれが次のマイルストーンなど、プロジェクトを進めるにあたり重要となる要所をマイルストーンとして設定する必要があります。スケジュール設定と混同されがちですが、マイルストーンはスケジュールの中における工程ごとの区切りと考えておきましょう。

マイルストーン払いとは、要はこの重要工程ごとに設定されたマイルストーンごとの分割払いという事になります。プロジェクトを作業工程ごとに設定し、その工程が完了する事で報酬の支払いが発生します。支払いが完了したらその次のマイルストーンまでの作業を行い、完了後また支払いが発生する。この流れがマイルストーン払いの形となります。要約すると、マイルストーン払いは工程ごとにそれぞれの予算を立て、検収が済んだ時点でその工程分の支払いを行うということです。

分割払い

システム開発における分割払いとは、着手金・中間費・後払いの3段階で行われるという事が多くあります。分割払いは、上記でご紹介したマイルストーン張りと混同されがちの支払い方法です。マイルストーン払いも分割払いも簡単に言えば同じような支払い方法と言えますが、設定された工程ごとの支払いとなるか、工程は関係なく、開発全体的な分割となるかという点が大きな違いとなります。

先に説明したように、工程ごとに設定されたマイルストーンそれぞれに支払いが生じます。しかし、分割払いは工程は関係なく、先ほどお話ししたような着手金、中間金、完成後の支払いと、大きく区切られた支払い方法になります。契約によっては分割回数を更に多くしているという事もありますので、一概にこの流れが正しいという事は言えませんが、マイルストーンのように工程ごとの支払いとは異なるという事は頭に入れておきましょう。

安く抑えるためのポイント

「システム開発の費用はなるべく安く抑えたい。でも質は下げたくない。」

開発依頼を行う場合、誰でもこのような考えを持つでしょう。なるべく安くいいものを得たいというのは当然の事です。しかし、システム開発の費用はその多くが人件費になりますので、どうすれば安くできるのか分からないという方は多くいるでしょう。無理に人員を削減してしまえばその分質が下がってしまいますし、だからと言って人員を減らさずそのままで行えば開発費用は安くならないでしょう。しかし、費用を抑えつつ質を保つという事は不可能ではありません。そのためには何をすべきか、どこに注意すべきかなどの3つのポイントをご紹介致します。

具体的イメージを伝える

システム開発では、どのような機能が欲しいのか、どんなアウトプットが必要なのかなど、具体的なイメージがない状態で発注依頼を行ってしまう場合、完成後になってからこうすればよかった、他システムの方がいいなどといった多くの不満が生じてしまいます。また、要求内容が曖昧になってしまうと、修正や再開発、工数の追加などが多く発生しますが、その場合は多くが追加費用が発生してしまいますので、コストが大幅にプラスされてしまいますし、かなりの時間もかかってしまいます。

そのため、まずは具体的なイメージを明確にしておくようにして下さい。「顧客システムが欲しい」「受発注の管理システムを作ってほしい」などと言ったざっくりとした要望ではなく、「人的ミスが多いため、チェックの作業にかかる時間やコストを削減する事が可能な受発注管理システムを依頼したい」「Webからの受注強化するために、オンラインとオフラインでのマーケティングデータを全社通して統合できるシステム構築をしたいといったレベルまで落とし込めるのが理想的です。

使用年数の想定

初期段階でシステムの使用年数を想定するのは簡単ではないでしょう。しかし、現実問題、使用年数の短いシステムに多額の費用をかけるのは得策とは言えません。特に、規模が大きいシステム開発の場合では多くの機能などを組み込んでいるため、トラブルも多く発生してしまいますので、保守費用や運用費用に想定以上のコストが必要になってしまうという事もあります。

さらに、現状のように市場変化が激しい環境下では、長期使用を前提としていても、短期間で刷新が必要となることもあるでしょう。システムの使用年数や投資回収期間を想定すること、その際に盛り込むべき機能や要素をしっかりと絞り込む事視点を持ちながらすすめていくことが重要と言えるでしょう。

すべてのシステム化を一気に行わない

企業として抱えている課題を解決させるために、あれもこれもとシステム開発依頼を行うのはやめましょう。現状の業務フローのままでシステムによる改善が出来るのか、業務フローの見直しが必要なのかを判断してください。

例えば、今の業務フローのままで、ネックとなっている人力作業をシステム化するという場合、基本的には一部門のみの対応で済むためけっこ測定、システム化は容易に行えます。

ですが、業務フローを見直したことにより改善が可能な場合は、わざわざ高いコストをかけて開発を行う必要はないでしょう。いわゆるBPR【ビジネスプロセスリエンジニアリング】であり、企業のトップ経営陣をも巻き込み全社プロジェクトとなるケースも少なくありません。システム開発の費用を抑えるだけではなく、構築対象を明確にすることでプロジェクトそのものも成功しやすくなります。

ASPやパッケージの利用

システム開発は、一般的な業務形態を想定して作られているパッケージが存在していますが、会社や業務に合わせてオリジナルで作るフルスクラッチというものもあります。当然、全てがオリジナルになるよりも既存パッケージの方がコストは安く済むでしょう。

また、ネットを通じてパッケージに搭載されている機能を提供してくれるASPというものもあり、こちらも費用を抑えるために活用できるでしょう。しかし、これらはコストが抑えられる反面一般的な機能しか搭載していないという点があります。

そのため、全てのシステム化の構築に適しているという事ではありません。パッケージの場合、もちろんカスタマイズを行うことも出来ます。しかしその分費用はかさんでしまいますので注意しておきましょう。細かなカスタマイズならともかく、大幅なカスタマイズはなるべく避けるようにし、パッケージそのままを活用する事がコストを抑えるポイントになります。

スムーズな支払いのカギは「契約書」

システム開発では支払いに関して実に様々なことが決められます。タイミングや金額はもちろんですが、他経費についての事やもしも損害賠償が発生した時のことなど、詳しく記載しておかなければいけません。いらぬ争いを避け、スムーズな支払いが行えるようにするためには契約書がカギとなります。具体的に、支払いや金額についてどのような記載が重要なのか、どんな内容となるのかについてご紹介致します。

検収条件

検収条件とは、本記事同等でお伝えした検収合格にとって欠かせない条件となります。システム開発では、完成したシステムを納品し、一定期間検収を行うのが一般的となっています。この研修にごうっくする事で作業は全て完了という形になるため、この合格に関する項目はあらかじめ双方で細かく取り決めておくようにしましょう。検収条件では、検収期間だけではなく、合格条件の記載も重要です。

検収期間

その名の通り検収が行われる期間です。システムの規模や複雑さにより期間は大きく異なります。一般的にはおよそ1~2週間程度が検収期間として多く設定されていますが、中には1か月を超える期間で契約書に記載されているという事もあります。双方で検収期間の長さについて、意見の食い違いや認識のずれがないようにしておきましょう。もしも1か月や2か月など長い検収期間を設定する場合、なぜここまでの長さになるのかを明確に説明する必要があります。

合格条件

こちらもそのままの意味で、合格するための条件を指します。システム開発では、発注者側が合格かどうかを判断しますが、個々が契約書上で曖昧になっており、極端に言ってしまえば発注者側の都合で不合格に出来るような都合のいい記載がある場合があります。中でも、「発注側が満足できる質でなければ不合格になる」といった内容がよく見られますが、こういった曖昧で都合のいい内容では会社の信頼度は下がり、その後の関係性に大きく影響を及ぼします。

また、受注側も、合格するかどうかわからないシステムに労力を注ぐようなことはしたくないというのが本音でしょう。合格条件に関しては、客観的検証が行えるようなものを定め、受注側、発注側どちらにとっても不都合のないようにしなければいけません。合格条件は支払いの時期に直接関係する重要な項目となりますので、曖昧な表現をしないようにし、双方の認識の違いの内容に細かく打ち合わせを行うようにしましょう。

支払いのタイミングと方法

システムを依頼する際に発生する報酬はどのような方法で支払いが行われるのか、そのタイミングはいつになるのかなどを細かく記載を行います。可能であれば、日付を記載することが望ましいでしょう。

  • 開発スタート日
  • 納品期限
  • 検収期間
  • 合否決定日
  • 支払い日

上記のように、それぞれの日付を明記しておくようにすると、後々のいらぬトラブルを避けることが出来ます。また、支払い方法も重要ポイントとなります。当然ですが、支払い方法が明記されていない契約書と言うのはあり得ません。本記事でご紹介したように、請負契約であれば原則として後払いが一般的です。ですが、だからといって契約書に書かなくてもいいという事では決してありません。

むしろ一般的な後払いであるからこそ、その旨をしっかりと明記し、他の支払い補法ではないという事を強調することが重要です。前払い、中間金、マイルストーン払いなどに関しても、それぞれ細かくタイミングを明記するようにしなければいけません。システム開発の支払いは、実に多くのトラブルの元凶となっています。

その他の経費

システム開発にかかる費用は、作業に関わるもののみではありません。打ち合わせやミーティングのための交通費、縁プであれば宿泊費なども発生します。こうした費用についての記載もしっかりと行うようにしましょう。基本的には報酬とは別の請求をするのが一般的ではありますが、契約内容などによってはその他の費用などについても報酬にすべて含まれるという事もあります。

また、全てにおいての支払いを負担するのか、負担金額の上限を決めるのかなどについてもしっかりと双方で取り決めておきましょう。開発費用だけではなく、こうした費用に関してもトラブルの原因となることがあります。金銭面の契約内容はっと得小さく細かなものでも放置することなく適切な内容を明記するようにして下さい。

損害賠償

システム開発は全て滞りなく完了するものばかりではありません。多少のトラブルや修正などは多くあるでしょう。しかし、中には損害賠償の請求などという大きなトラブルになる事もあります。損害賠償請求は、発注側が受注側に請求を出すという事がほとんどと思われがちですが、発注側が請求されるというケースも珍しくはありません。そのため、「損害賠償に関する項目は双方どちらにとっても重要と言えるでしょう。

損害賠償請求トラブルが契約書内容で解決できない場合、訴訟まで発展してしまうという事もあります。契約書に記載する損害賠償に関する項目としては、責任の所在やその範囲、期間、金額の制限などが主となります。特に金額の制限などについては、無制限に賠償請求をされてしまうというリスクを回避する事になりますので、しっかりと明記しておきましょう。

システム開発の支払い・トラブル事例

「システム開発は支払いに関するトラブルが多い」

「支払いトラブルによって裁判になったこともたくさんある」

こうしたざっくりとした情報は多くありますが、実際どのようなトラブルがあったのか、どんな裁判になりどのような判決が出たのかなどと言う詳しい内容までは知らないという方は少なくありません。そこで、ここでは実際にあったシステム開発の支払いトラブルについてご紹介致します。

ケース1:完成後の不具合により支払い拒否となり損害賠償請求

石材の加工や販売を事業としている発注側が、システム開発会社に販売管理システムの開発を一括請負契約で依頼しました。開発が完了し納品されたシステムを稼働させたところ、不具合の発生があり処理速度の遅く使用が出来ないという連絡をしましたが、開発会社側は不具合に関して一切認めず、補修作業行わなかったために発注側企業は開発費用の支払いを拒否しました。

開発会社は、加勢したシステムを納品したにもかかわらず支払いがないという事で裁判を起こし、発注会社を訴えました。発受注側の請求内容は損害賠償1億1千万円の請求でした。その際、発注会社は反訴し、システムの不具合を原因とした契約解除、前払い金1,000万円の返還と損害賠償1億3選万円の請求を求めました。

裁判所は、システムの完成はしているが補修が一切なく、重大な不具合であるために契約解除の原因として妥当と判断。開発会社側の請求を棄却し、発注会社側の請求の一部を容認しました。その結果、システム開発会社は前払い金1,000万円の返還、500万円の損害賠償を支払うように命じられました。

ケース2:納期遅れと追加請求トラブル

発注企業は大手旅行代理店で、宿泊予約などが出来るHRシステムの再構築を依頼しました。しかし、スケジュールが大幅に遅延してしまい、プロジェクトや人員体制の見直しを行ったものの当初の予算より大幅にコストが掛かってしまうという事態に陥り巻いた。さらに、開発会社から実に1年以上もの稼働時期の延伸を提案されたために、発注側は契約解除を行いました。

その後、プロジェクト失敗の責任、開発費用の支払いに関する話し合いを長く続けましたが結局解決させることは出来ず、最終的に裁判に判決が委ねられました。裁判では、遅延の原因がどちら側にあるのかが争点となり、およそ3年余りの長い裁判の結果、双方請求内容を放棄し裁判費用の負担をそれぞれが行うという形で和解しました。今回のケースでは、裁判が長くなりすぎたためにこれ以上話し合いを行っても時間とお金がただ消えていくだけだという判断の元、双方で和解という道を選んだとされています。

まとめ

システム開発は特に重要なのが報酬支払です。トラブルとなる大きな要因の1つでもありますし、発注側も受注側も余計なコストはかけず、負担を最小限に抑えて仕事を行いたいという気持ちは同じでしょう。そのため、契約書には支払いのタイミング、方法やその他の細かな内容まで全て詳細に記す必要があります。

裁判ともなれば裁判費用や損害賠償など、さらに大きな金額が失われてしまうでしょう。こうしたリスクを回避するためには、支払い内容について契約書にしっかりと明記し、お互いの認識のずれをなくすことが重要です。

  • 契約形態による報酬支払いの違い
  • 支払い方法によるタイミングの違い
  • トラブルが起きた際の損害賠償の金額条件

こうした上記の内容は特に大切な項目と言えます。スムーズな開発を行い、事業を円滑に進めていくためにも、開発前にしっかりと確認を行い、未然に防げるトラブルに関しては徹底した準備を行っておくようにしましょう。

【システム開発の相見積もり】重要性と行う際の注意点、開発成功のための4つのポイントについて徹底解説!

「○○人月1人日○○円など、提示されたけど、、システム開発の見積もりの相場が分からない」

見積もり金額だけじゃなく、出来れば自社にピッタリの会社に依頼したい」

人月単価人日単価が見積もり依頼した会社ごとに違うけどこの内容が妥当なのか判断できない」

システム開発を行う上で最初に行う見積もりですが、開発依頼に慣れていない場合、見積もりを出されてもその金額は相場の範囲内なのか、本当にこの会社に依頼しても大丈夫なのかと不安や疑問が多くあるでしょう。そんな時には相見積もりを行い、自社に最適な見積書を探し出すことをおすすめします。

相見積もりとは、複数社の会社に同時に見積もりを出してもらい開発費用の比較検討する手法です。また開発コストのみならず、自社のシステム開発を依頼すべき会社を効率的に見極めることが出来るでしょう。相場や工数などの平均を知るだけではなく、会社として開発に臨む姿勢や対応力なども判断することが出来ます。

相見積もりをうまく活用するためにはどうすべきか、本記事でその重要性や失敗しないためのチェックポイントなど、これから見積もり依頼を行うという方に向け、相見積もりに関する重要な情報全てをご紹介致します。

相見積もりの重要性

システム開発を行う場合、依頼をする前に開発会社から必ず見積もりを提出してもらいます。しかし、相見積もりを行うとなると、企業担当者の中には「1社だけでいいのではないか」「何社も見積もり依頼をするのは面倒」と感じる方もいるでしょう。しかし、システム開発依頼を行う場合、この相見積もりは非常に重要な意味を持ちます。

むしろ相見積もりを行わずに最初から1社に絞って見積もり依頼を行いそのまま開発スタートした場合、そのほとんどは失敗すると言っても過言ではないでしょう。なぜ相見積もりがそこまで重要なのか、まずは根本的な役割を深く知り、システム開発依頼を行うにあたっていかに大切なことなのかを把握しておくようにしてください。

単価や工数、期間などの妥当性

相見積もりで最も重要なのは、やはりその内容の比較と言えるでしょう。前提条件は正しく盛り込まれているか?正確な工数が記されているか、妥当な単価で金額が算出されているか、開発期間は適切かなど、多くの項目を比較することが出来ます。むしろこの比較のために相見積もりを行うと言っても過言ではありません。他社と比較し、適正な内容となっているかを確認するためにはこの相見積もりは欠かせないでしょう。

単価が極端に安いという場合、エンジニアなど開発を行う技術者が経験のない新人だったり、スキルが乏しい人材のため、人件費そのものが安いということもあるでしょう。中には地方ベンダーのために安く設定されているということもあります。逆に見積額が高いという場合、スキルや経験が豊富にある有能なエンジニアということもありますし、新人であっても都内など単価が高いベンダーであるということもあるでしょう、

この場合、なぜその金額なのかという明確な根拠をそれぞれに示してもらう必要があります。また、開発期間に関しても、新人などの場合はリスクも含まれるため期間を長く設定しているということもありますので、出来上がった見積もりに対して細かな点を直接聞き、なぜこうなったかという事を必ず確認するようにして下さい。こうした比較は相見積もりを行ってこそ出来ることになりますので、気になるところはとことん突っ込むようにしましょう。

打ち合わせ時のヒアリング力

見積もりを作成する際には、事前に打ち合わせを行う必要があります。その際、見積書を作成するための前提条件、開発の目的や導入後の将来的予測など、様々なことを開発会社に伝えます。この打ち合わせ時でいかに依頼側の業務内容を理解できるのか、適切なシステムのための見積書の作成が出来るのかは担当者のヒアリング力と理解力により異なります。話し合いの中での情報をしっかりと吸収し、システムに反映させた見積書の作成が出来る会社であれば、信頼して依頼することが出来るでしょう。

しかし、前提条件が正しく盛り込まれていない、自社の業務効率化のためのシステムであるということを理解していない場合、打ち合わせ時に伝えた内容が組み込まれていないことがあります。全く別物として出来上がることはそうそうありませんが、自社内で取り決めた前提条件が無条件に変更されているということは珍しくありません。いくら打ち合わせ時にしっかりと伝えたつもりでも、担当者のヒアリング力や理解力が弱ければ、その条件の根拠を読み取らず、開発会社側の都合を優先した見積書の作成してしまいます。

こういった開発会社は信頼できる会社とは言えないでしょう。前提条件変更の確認が前もってあるなら話は別ですが、打ち合わせ時にしっかりと説明したにも関わらず変更をする会社の場合、開発がスタートしても確認や伝達無く様々な変更をする恐れがあります。相見積もりを依頼していなければ、他の依頼先をまた1から探して見積もり依頼を行わなければいけません。見積もり作成に数日かかることは普通です。その分の日数も無駄になってしまいます。相見積もりを依頼した場合は、同じ条件で一気に見積もりを受け取ることが出来るため、こうした時間を無駄にせず、かつ会社の信頼性も判断できるでしょう。

見積もり書提出までのスピード感

相見積もりを行うと、見積書が完成し提出されるまでのスピード感とその正確さを比較することが出来ます。開発会社の中には、最短で即日見積もり作成が可能と謳っているところもあります。中には数日、数週間の期間が必要という会社もあるでしょう。もちろん迅速で素早い見積もり作成は非常に大切ではありますが、その内容に正確性がなければ意味がありません。見積もりは金額や工数を正確に記す必要があるため、早ければいいということでは決してないということを頭に入れておきましょう。

見積もり依頼を数社に依頼して、1社は即日見積もり作成を行い、残りは数日から数週間程度の期間で作成が完了した場合、特に見積書に関する知識がなければ早くに作成を行ってくれた会社、もしくは安く見積もり作成を行った会社に依頼をするという担当者は多くいます。しかし、その内容を隅々まで比較すると、大きくずれている点や極端に工数が少ない、期間が短いということがあります。

見積もり作成がスピーディで尚且つ正確性が高い見積もりは完璧に近いため信頼できると言えます。しかし、ただ素早い作成だけで前提条件などが正しく盛り込まれていない、こちらの要望や条件をしっかり反映させているのに見積もり作成に大分時間がかかってしまうという会社の場合、後々に開発に関する大きなトラブルやスケジュールの遅延などという問題が生じる可能性が非常に大きくなります。相見積もりをして正しい比較が出来れば、こうした問題を回避することに繋がります。

「ミス」の発覚

複数の会社に見積もり依頼を行った場合、自社とベンダーのお互いの見落としを発見できる可能性が非常に高くなります。伝え漏れてしまった箇所や仕様構成の誤りなどに関して、複数の視点から見ることにより開発を行う前段階で気付くことが出来るため、効率のいい開発を行うことが出来るようになるでしょう。こうした小さなミスは、開発が始まってから気付くと取り返しのつかない大きなトラブルの原因ともなります。

依頼する側が入念なチェックを行うのはもちろん当たり前ではありますが、それでもどこかしらに小さなミスはあるでしょう。伝えるべきことをしっかりと伝えられなかったという事もありますし、伝え方が不十分で理解に相違があるという事もあります。こうしたズレやすれ違いを、複数の会社を比較することにより早期発見することが可能となります。

相見積もりの際の注意点

相見積もりをする場合、ただ単に見積もり依頼を行えばいいという訳ではありません。正しく的確な比較を行うためにも、依頼する側も徹底した準備が必要になります。丸投げで見積もりだけ出してもらっても、そこから適切な依頼会社を決めることはまず不可能でしょう。相見積もりを行う理由には、先ほどお話ししたように様々な会社の特徴やスピード感などを確認するためでもあります。正確に他社同士の比較を行うにはどうすべきか、何に注意すればいいのかという大切なポイントを4つご紹介いたします。

要求内容を明確にし統一する

正しい相見積もりを行うためには、見積もりをしてもらうシステム開発に関する条件や項目を統一する必要があります。予算が違う、見積もりする範囲が違う、期間が違うなど、大小関わらず会社ごとに条件が異なってしまえば同じ内容の見積書の作成は出来ません。相見積もりの前提として、必ず全て同じ条件で見積もり依頼を行う事が絶対的なルールと言えるでしょう。要求内容の統一を行うためには、「前提条件の取り決め」「提案依頼書の作成」は欠かせません。それぞれ、なぜ重要となるのかを詳しく解説いたします。

前提条件の取り決め

前提条件は、依頼を受ける側、依頼をする側の双方で理解度を同レベルにするために文章化するものになります。この前提条件が少しでもずれていては、適切な相見積もりを行う事は難しくなります。

見積もり範囲依頼するシステム開発の対象範囲を明確にします。
見積もり対象外範囲「見積もり範囲」とは逆に、対象に入らない範囲を明確にします。
仕様技術開発言語、フレームワーク、サーバーなどの仕様技術の指定を行います。
開発プロセス開発の進め方などを細かく設定します。
プロジェクト期間プロジェクト開始から終了、テスト期間などのスケジュールを明確にします。
要件開発システムに必要な役割や機能を明確化にします。まだ決まっていない場合、想定できる機能に対し前提を示してください。
プロジェクト推進方法進捗管理・推進は誰が行うか、意思決定はどう行うかなどの役割分担を決めておきます。
ネットワーク環境システム関連機器を購入するのか構築するのか、ネットワーク環境の活用方法を明確にします。
テストテストパターンはどのくらい必要か、何を行うのかを明確にします。
納品物成果物の粒度も含め謡的に示します。

上記内容が基本的な前提条件になります。詳細まで細かく取り決めを行い、漏れがないように徹底した前提条件の作成を行ってください。この前提条件を基準として見積もりを作成してもらいます。何度も言いますが、提示する条件にブレが出たり見積もり依頼会社ごとに条件が異なってしまった場合、正しく正確な比較を行う事は出来なくなってしまいますので、徹底して同一条件で行うようにして下さい。

提案依頼書(RFP)を作成して統一

それぞれの会社の実力やコストなど、様々な条件を正しく比較するためにも、条件の統一は絶対です。そのために有効なのが提案依頼書(Request for Proposal)になります。提案依頼書があれば条件などに関するすべてを統一して伝えることが可能になります。見積もり依頼をする前に労力を使用する事や、時間がかかってしまうというデメリットもありますが、相見積もりを正しく行うためにも重要な作業と言えるでしょう。もちろん提案依頼書を作成せずとも見積もり依頼をすることは可能です。

しかし、その場合は「すべての依頼会社に対して前提条件などの要望を同じ内容で必ず伝えることが出来る」という根拠がなければ、正確な比較が行える見積書の作成は望めません。システム開発を依頼するためにどの会社を選べばいいのか、失敗しないために相性のいい会社はどこか、コストや期間などが一番マッチする会社はどこかという事を決めるための相見積もりです。システム開発成功のためにも、妥協せずに徹底した準備を行うようにしましょう。

見積もり依頼した他業者の名前や金額は伝えない

基本的な事にはなりますが、相見積もりを行った場合、「〇〇会社は◇日で見積もりしてくれた」「〇〇会社は◇◇円の見積もりが出た」などという情報を、他社に伝えることは厳禁です。相見積もりであるということを隠す必要はありません。相見積もりを依頼しているという事を伝えれば、自身がある開発会社であれば何の嘘偽りもなく適正価格と期間、工数の見積もりを出してくれるでしょう。このような会社は、その全てにおいて明確な根拠を示してくれるため、かなり信用性が高いと言えます。

しかし、相見積もりをしているという情報以上に、金額や業者名など更に詳しい内容を伝える必要はありません。こうした情報を伝えてしまうと、「あの会社より安くする」「ライバルには負けたくない」という気持ちが強くなってしまい、他会社よりも金額を安くする、工数を短くするという事に囚われてしまい、正確な見積もりを作成してもらえなくなります。そうした会社に依頼をしてしまえば、後々になってから見積もりの内容とは全く異なる工数や金額になるという事もあります。相見積もりをしているという事は伝えるべきことですが、それ以上の詳細は伏せておくようにして下さい。

「発注側」という自覚を強く持つ

見積もりを出してもらった際、値引き交渉を行いなるべくコストを抑えた開発をお願いするという事もあります。この場合、必ず自身が「発注した側である」という事を強く意識して下さい。元々優しく人の事を考えすぎてしまうという方の場合、「こんな値引き交渉は相手を苦しめてしまうのではないか」「無理を言って困らせていないか」などと考えてしまう事があります。人としてはとても思いやりのある方ですが、こうした交渉の場ではこのような感情は不利になることが多くあります。

少しでも気を緩めてしまうと依頼会社に見抜かれてしまい、こちら側の値引き要求は聞き入れてもらえなくなるでしょう。場合によっては「こんな値引き交渉はありえない」「常識的な金額ではない」と否定的なことを言われてしまう事もあります。元が優しい方であればあるほど、このように責められると委縮してしまい適切な値引き交渉は不可能となってしまうでしょう。もちろん、法外な要求はしてはいけません。しかし、全てが開発会社の言いなりになってしまうというのも考え物ですので、強く発注側であるという立場を自覚し、正しい値引き交渉を行ってください。

比較基準を明確にしておく

合い見積もりを行い全ての会社の見積書が提出されたら、それらを比較しどこが適切かを選択します。この際に、比較すべき基準を明確にしておくとやりやすくなるでしょう。基準がなくただ単純に見積書を見比べるだけでは、その会社が一番自社に見合っているか、コストや期間、工数など、システム開発における重要な項目においてどこが一番適正なのかという事が分かりにくくなってしまいます。1か月という期間で見積もりを出したA社と、3ヵ月で見積もりを出したB社であれば、単純に納期が早いA社を選んでしまうでしょう。

しかし、実はこのA社の期間にはリスクが含まれていなかったり、1か月の期間という明確な根拠などがないという場合があります。逆にB社の場合、3か月かかるという根拠、リスクに関する期間などもすべて含まれた見積もりとなっているため、この場合はB社の方が後からのトラブルなどを回避することが出来るでしょう。金額なども同じように、安いからと言って選んでしまうと、エンジニアが初心者ばかりで開発がスムーズにいかないという事もあります。

そのため、自社の基準とする項目はどこになるのか、なぜここを基準とするのか、その条件などについて社内でしっかりと明確化させておくようにしましょう。期間は長くなっても安く抑えられるところがいい、金額は高くなっても実績のあるエンジニアに依頼したいなど、依頼を行う上で特に重要視する要望について明らかにさせておきます。どこを重点的にシステム開発を行うのかを明確にし、比較する際はそこを基準として見比べるようにして下さい。

相見積もりで失敗しない4つのポイント

初めて相見積もりを行う場合や、まだ相見積もりの依頼に慣れていないという担当者の場合、相見積もりを成功させるためには何が必要なのか、どのように進めていけばいいのか、どんな準備があるのかという事がまだはっきりと把握できていないという事もあるでしょう。

  1. システム開発の目的を社内で共有する
  2. 相見積もりに必要な前提条件を設定する
  3. 提案依頼書(RFP)を作成して条件を統一化させる
  4. 相見積もり依頼を行う
  5. 値引き交渉をする
  6. 他社との比較を行い選別する

一般的に、相見積もりを行う流れは上記のようになります。この流れに沿って行えば大体は失敗なくスムーズに行うことが出来ますが、開発会社に自社を信頼できる相手として認識してもらうことが出来れば、より成功率を高め質の高いシステム開発を依頼することが出来ます。

また、信頼できる会社として評価されれば、少しでも好条件で見積もりをしてくれる努力を行ってくれるでしょう。値引き交渉もスムーズにすすめることも可能となります。そのためにはどうすべきなのか、ここで相見積もりを失敗させないための4つのポイントをご紹介致します。

自社ITレベルを理解してもらう

相見積もりで開発会社と打ち合わせや交渉を行う際に、自社のIT知識やスキルを偽りなく伝えるようにして下さい。普段から付き合いなどがある相手企業であれば問題はありませんが、相見積もりを依頼するという場合は、そのほとんどが初めての相手という事がほとんどとなるでしょう。そのため、自社のITレベルを正しく正確に伝えなければいけません。

見積もりを受けるのが初めての開発会社は、依頼した企業のITの導入レベルやスキルなどを基準とし製品制定や工数の見積もりを行っていきます。自社に最適な正確な見積もりをもらうためにも、まずはITレベルをしっかり理解してもらうために、どのくらいの知識やスキルを有しているのかという実情を伝えるようにしましょう。

見積もり内容の不明点は即確認し解決する

見積書は様々な内容が記載してあります。その項目それぞれをしっかりと確認し、少しでも疑問に思う点や気になる箇所があれば必ず説明してもらうようにして下さい。分からないまま進めてしまうと、後になって予想外なトラブルに発展してしまうという事があります。

要件定義実際のシステム開発に必要な機能や性能を落とし込む作業です。
設計基本設計や詳細設計、プログラミング設計などの様々な設計を示します。
UIデザイン既存テンプレートを使用するか、カスタマイズしたUIデザインを使用するかを明確にします。
開発システム開発のメインとなる人件費や技術費全般が計上されます。
テスト不具合なく稼働するかどうかのテストを行うための費用です。テストは数種類あり内容も行うタイミングも異なります。
導入実際に導入する際の初期費用が計上されます。
受入支援既存のシステムデータ移行などという作業が必要な場合に発生します。
導入支援費用マニュアル作成や扱い方の説明会、研修会開催などが必要な場合に発生します。
購入費システム開発に必要な機器があった場合の費用になります。
交通費開発に関する事での打ち合わせや訪問の際にかかる交通費です。遠方の場合は宿泊費なども含まれます。
保守開発完了後の不具合やエラーの対処、扱い方の問い合わせと言ったフォローを示します。

見積書には上記のような項目が記載されています。これ以上の項目の場合もあれば、この一部のみという事もあるでしょう。それらをしっかりと確認し、なぜこの費用になるのか?なぜこの工数なのか?など、少しでも疑問に思う事は即座にその場で解決させるようにしておきましょう。開発会社の中には、特別な根拠なく見積もり工数などを記載している場合があります。ここでしっかりとした根拠を示してくれる会社ならば、非常に頼りになる会社と言えます。

逆に、曖昧な説明でかえって疑問が大きくなってしまったり、明確な答えを出さずに交渉が終わってしまったという場合は、なるべく依頼するのは避けたほうがいいでしょう。こうした会社は、「見積もりを出す」という事だけを目標として作成していることが多く、いざ実際に依頼を行うと、全く異なる仕様で開発を行ったり、工数が見積書以上にかかるという事も少なくありません。必ず疑問はその場で解決し、その際に開発会社の対応についても良く観察するといいでしょう。

自社主導でのベンダーの取捨選択

見積もりの確認を行うにあたり、当然分からないこと、理解できないことなどが出てきます。ですが、こういった時に主導権を相手側に譲らないようにして下さい。もし見積書の中で不可解な部分があれば、開発会社に質問攻めするくらいの勢いで問いただし、しっかりと説明を行ってもらうようにしましょう。なぜこの金額になるのか、なぜこの工数なのかなど、自社にとってこれが最適な根拠は何なのか、費用対効果は出るのかなど徹底した確認を行うようにしましょう。

基本的に、ベンダーはまず過剰な機能を盛り込んで見積もりを行います。どの項目でも、「あれば良い」「安全」「便利」と思い必要だと考えがちですが、予算もしっかりと考慮し不要な機能は外していきましょう。また、自社からの要求で不要な物がある場合はそれも外すようにして下さい。方向修正を繰り返しながら自社に最適なシステムを見つけていくためには、主導権は譲らずに見積もり項目の取捨選択は開発を依頼した側が行うようにしましょう。

値切り交渉は的を絞って

仮に相見積もりを3社に依頼した際に、内容に大きな違いがないという場合には非常に比較しやすくなります。こういった場合、価格、技術力、品質や納期などに的を絞り依頼する開発会社を決定します。ここで値切り交渉に入りますが、交渉を行う時には必ず的を絞って行うようにして下さい。「とりあえず安くしてほしい」という明確性のない安易な値切り交渉は厳禁です。値切り交渉は、値切る人物の人柄やテクニックに頼る場面が非常に大きいですが、上手く話しを進めるためにも、見積書の内容をしっかりと把握し、値切るポイントをハッキリとさせておきましょう。

先程のベンダーの取捨選択でもお話ししたように、自社からの要求で不要な部分を削除する場合などは、その分のコスト削減を提案するという事も可能となります。過剰機能の削除を的確に指摘することが出来れば、必要最低限の開発費用で本当に必要な機能のみを搭載した最適なシステム開発を行うことが出来るでしょう。ここでスムーズな話し合いが可能となる開発会社であれば問題はありませんが、中には何かしらの理由を付けて値切り交渉を拒否する会社もあります。

根拠のある理由で機能の削除や値切りが不可能という場合を除き、ただ単にコストを削減させたくない、値切られたくないという姿勢での拒絶は、今後信頼関係を築くことは難しいでしょう。そういった会社は依頼を見送るようにして下さい。

こうした会社を選別するためには、見積書の内容の徹底把握はもちろんの事、値切り人の見極め力が非常に大切になります。値切ることが出来なくても、その会社がどのような姿勢で開発に臨もうとしているのかという事も判断できるでしょう。あくまで交渉は値切るためではありますが、その他の対応についても良く観察しておくようにして下さい。

依頼先が決まったら他業者へ感謝と丁重なお断りを

相見積もりを行い、その中の1社に依頼を決定した場合、他企業にはしっかりと丁寧なお礼と断りの連絡を必ず入れるようにして下さい。見積もり作成はタダではありませんし、貴重な時間を使って作成をしてくれています。そのまま何の連絡もなく放置するというのは、あまりに失礼な態度となります。仮に今回は依頼を行わなかったとしても、今後何かしらで取引を行う事も考えられます。

担当者の中にはこうした連絡を行う事に対して気まずさを感じそのままにしてしまうという方もいるかもしれません。しかし、それは会社そのものの評価を下げる事にも繋がってしまいます。電話、もしくはメールでしっかりと、見積もりを出して頂いたことへの感謝、依頼を行わないという事に対する謝罪と丁寧な断りを伝えることで、いたずらに関係を壊すことなく穏便に済ませることが出来ます。

まとめ

適切なシステム開発を行うためには欠かせない相見積もりですが、しっかりとした準備と知識を持っておかなければ成功への道は遠のいてしまいます。本記事で紹介した重要性と注意点、失敗しないためのポイントをしっかりと把握し、双方にとって気持ちよく契約を結べるようにしましょう。相見積もりを行う事で、最適なコストや工数だけではなく、相性のいい開発会社とのつながりを持つことも出来ます。

正しく比較し、自社の業務効率化や質の向上のためにはどんなシステムが適しているのかをよく考え、統一した条件で相見積もりを行ってください。

  • 相見積もりを依頼した会社に対して失礼な態度や雑な扱いをしない
  • 前もって自社内で条件を細かく決めておく
  • 提案依頼書(RFP)を作成し統一した条件で見積もり依頼を行う
  • 主導権を握らせずあくまで依頼側の要望通りの開発をお願いする
  • 依頼しない会社に対してしっかりとお礼と謝罪を述べ、むやみに関係を壊さない

特に上記の5項目は相見積もりを行う上で忘れてはいけない重要ポイントと言えます。担当者だけではなく、自社内でしっかりと共有し、正しい相見積もりが行えるように体制を整えておきましょう。

【GitHub(ギットハブ)の使い方 完全ガイド】専門用語の意味は?使用の手順は?料金形態は?githubの基本を徹底解説!

「GitHub(ギットハブ)って何?」

「どうやって使えばいいの?」

「利用にお金はかかるの?」

今や世界中で活用されているGitHub(ギットハブ)ですが、まだ活用した事の無いエンジニアの方、インストールはしたけど実際どのように使えばいいか理解できていないという方は多くいるでしょう。本記事では、そんな方々のために、githubの基本情報、使用する専門用語の解説、使い方の手順などを詳しくご紹介しています。

本記事の内容を正しくしっかりと理解することが出来れば、今後の開発における作業を大きく効率化させることが可能となるでしょう。個人での使用、チームを組み大人数での使用など、状況に合わせて最適な活用が可能なgithubについて、理解を深めつつスキルを高めていきましょう。

GitHub(ギットハブ)とは?

開発に携わる方にとってなくてはならないのがこの「GitHub(ギットハブ)」です。しかし、プログラミングが初めてという方にとっては、あまり馴染みがなく何のことだか良く分からないなんて悩んでしまう事もあるでしょう。

このgithubは、開発環境を支援するためのWebサービスを指し、簡単に言うとコード管理するためのツールの事です。ソースコード更新を行ったバージョン管理、閲覧、SNS機能、バグの追跡機能などが備わっています。githubを使用してソースコードの管理をしているという企業も少なくありません。

後程詳しくご紹介致しますが、githubには無料版と有料版の2つのパターンがあります。これまでは無料版の場合、機能の制限などがありましたが、2020年は無料であっても主要機能が使用できるようになったことで、今まで以上に費用対効果が高くさらに使いやすいサービスへと進化していきました。

gitとGitHub(ギットハブ)

まず、GitHub(ギットハブ)を正しく把握するためにはgitについての知識を得ることが重要です。

gitはコマンドラインツールの1つであり、ソースコードのバージョンについて、いつ、だれが、どこで編集したのか?最新バージョンはどれか?といったような管理を行うツールとして作られました。gitの大きな特徴は「分散型」であるという点です。

ソースコード管理は他にも様々なツールがあり、メジャーなところで言えば「Subversion」が代表として挙げられるでしょう。しかし、gitは前述したように記録や追跡などの管理を分散型で行うため、修正履歴を整理しながらログを残すことが出来たり、ロールバックを簡単に行えるようになるなど、エンジニアには欠かせないツールとなっています。

githubとは、このgitのリポジトリをまとめたサービスであり、冒頭で紹介したように開発環境を支援するために、gitをより便利に使いやすくするために作られました。法人・個人問わずに誰でも利用することが出来るというのも大きな特徴の一つと言えます。

複数人での開発に威力を発揮!

開発を行う場合、複数人で作業を進めていくと様々な変更がその都度加えられていきます。GitHub(ギットハブ)を活用する事で、「誰が」「いつ」「なぜ」その修正を行ったのかという事が同時に記録されますので、機能追加やバグ修正、フィードバッグなども、簡単かつスピーディに行えるようになります。

さらに、チーム全員でプロジェクト進捗状況などが把握できるようになるため、開発作業における効率も格段にアップします。また、仮に自分自身が上書きを行う場合にも、変更点が重複しているというような場合は知らせてくれるため、知らない間に上書きしてしまうといったミスも防ぐことが出来ます。

使用する前に知るべき6つの事前知識を解説

GitHub(ギットハブ)を使用する場合、まずは専門用語についての情報をしっかりと理解しておく必要があります。使い始める前にここで紹介する言葉を正しく把握しておくことで、よりスムーズに、正しく活用できるようになります。

ローカルリポジトリとリモートリポジトリ

まず「リポジトリ」という言葉について解説いたします。リポジトリとは、GitHub(ギットハブ)でファイルやディレクトリを保存するスペースです。ローカルリポジトリとはローカル環境にあるディレクトリのリポジトリという事になります。ローカル環境とは、簡単に言えば使用しているパソコンの事を指します。つまり、使用しているパソコン内で管理するリポジトリがローカルリポジトリになります。ローカルリポジトリは、新しく作成を行ったり、複製しバグ修正や機能追加の実施が行えます。

リモートリポジトリとは、ローカルリポジトリとは異なり、インターネット上にあるリポジトリの事です。ネット上にファイルをアップロードし管理を行います。複数人で開発を行うという場合には、ローカルリポジトリで作業を行い、その作業内容をリモートリポジトリへプッシュするといった流れが基本となります。

コミットとプッシュ(commit / push)

GitHub(ギットハブ)で、最低限このコミットとプッシュは必ず覚えておきましょう。コミットとは、ファイル追加、変更などをリポジトリに保存する事になります。ゲームで言うところのセーブポイントと覚えておいて下さい。コミットは任意の状態で保存が出来、何個でも持つことが可能です。

プッシュとは、簡単に言えばアップロードです。ファイル追加や変更履歴などをリモートリポジトリと同期させ、自身のコミットを反映させます。チームを組んで複数人で開発を行っている際には、自分以外の誰かがプッシュして、プログラムに変更が加えられているという事もあります。

ブランチ(branch)

変更履歴の分岐を記録するものです。開発作業は、現在のバージョンのメンテを行いながらバグ修正や機能の追加を行う事があります。複数バージョンの管理を行うために必要なのがこのブランチです。履歴の流れを分岐させて記録しますので、オリジナルから分岐させたブランチは他のブランチの影響を受けることはありません。

開発メンバーが同時に行えるというのが大きな特徴です。先ほどもお話ししたようにそれぞれが独立しているため他ブランチの影響を受けることがありませんので、同じリポジトリ内であってもそれぞれの作業を問題なく進めていく事が可能となります。大本のデータがあれば、ブランチを合流させることでファイルを最初から作り直すことなく様々な修正を加えることが出来るようになります。

クローン(clone)

リモートリポジトリをコピーしてローカルを作成することを言います。このクローンを行う事により、githubにあるすべてのデータを完全にコピーする事が可能となります。クローンを行ったタイミングでの全く同じ環境のものをローカルに作成することが出来るので、他の人の影響を一切受けずに自身のパソコンで作業を行う事が可能となります。

プルリクエスト(Pull request)

ローカルリポジトリで自身が行った変更をオリジナルに反映させるための通知方法です。プルリクエストを行う事で、オリジナルの更新を依頼することが出来ます。github上で行う事が可能なため、スムーズに更新を行えるのも特徴的です。コードのプレビューをすることによって、一人では見逃してしまうようなバグやコード記述ミスなどを発見することが出来るため、質を向上させることが出来ます。

フォーク(fork)

フォークとは、自身のアカウント領域に既存リポジトリの複製を作成する機能の事を指します。その名の通り、食事のときに使用するフォークを思い浮かべて下さい。フォークの先端のように、複数に分けられている他の人のプロジェクトリポジトリをコピーし、自身のものへと改変していきます。フォークは、オリジナルへのアクセス権がないという場合であっても自身の場所に入れることにより編集することが出来るようになります。

GitHub(ギットハブ)の使い方

専門的な用語の知識を一通り覚えたところで、次に重要なのが当然GitHub(ギットハブ)の使い方になります。どのように始めればいいのか。どんな操作が必要なのか、その方法と手順を1つずつここで詳しくご紹介致します。まずその手順ですが、流れは以下のようになります。

  1. gitのインストール
  2. gitの初期設定
  3. githubのアカウントを作成する
  4. リモートリポジトリを作成する
  5. ローカルリポジトリを作成する
  6. ファイルを作成する
  7. ローカルリポジトリにコミットする
  8. リモートリポジトリにプッシュする

このように、手順の中でも先ほどご説明したようなコミットやプッシュと言った単語が出てきます。そのため、繰り返しになりますが、まずは専門用語の意味についてしっかりと理解をしたうえで始めるようにしましょう。曖昧なままでは、使い始めても適切な活用が出来ず、開発を効率よく進めていくことが出来ません。

まずはこうした専門用語をしっかりと把握し、スムーズな活用が出来るよう徹底した準備が必要です。そうすることにより、よりgithubの理解度が上がり、開発を効率よく進めていくことが出来るでしょう。それでは、手順の内容について1つずつ解説していきます。

1.gitのインストール

まずはgitをインストールします。まずここで注意すべきは、gitとgithubは同じものではないという点です。先にもご説明した通り、gitはコマンドラインツールとなり、githubはgitを用いた共有のウェブサービスです。簡単に言えば、gitはシステムとなり、そのgitを使用したサービスがgithubです。この違いはしっかりと頭に入れておき、「2つは別物である」という事を理解しておきましょう。

gitをインストールする場合、Macであれば標準装備されていますので、インストールの必要はありません。仮に、インストールされていない場合や最新バージョンにアップデートしたいという場合は「Download for macOS」からインストールを行ってください。Windowsの場合、Macと違い標準装備されていないので、「Git for Windows」からダウンロードしてインストールする必要があります。

2.gitの初期設定

インストールが完了したら次に初期設定を行います。自身のユーザー名、メールアドレスの登録を行ってください。この初期設定はインストールを行った後に一度だけ行えばOKです。何度もやる必要はありません。初期設定で登録した内容は、リポジトリに対してコミットを行った人物の情報として、履歴に表示されるようになります。パスワード設定は7文字以上で設定を行ってください。

3.GitHub(ギットハブ)アカウントの作成

初期設定が全て完了したら、githubのアカウントを作成します。公式サイトからアカウントの作成が出来るので、メールアドレス、パスワード、ユーザー名を登録してください。アカウント登録はこの3項目を設定すれば完了です。ここでプランを選択します。有料・無料がありますが、後々変更することも出来ますので、まずは無料で行うことをおすすめします。その後登録したメールアドレス宛に認証メールが届きますので、指示に従いながらユーザー認証を行えば登録完了になります。

4.リモートリポジトリを作成する

次に、リモートリポジトリを作成していきます。トップ画面から「Create Repository」をクリックし、作成画面に移動してください。作成したいリポジトリ名を入力し、種類を選びます。ソースコードの公開を行う場合は「Public」、ソースコードの後悔はしたくないという場合には「Private」を選んでください。

また、予めREADMEファイルの作成を行っておくという場合には、「Initialize this repository with a README」の項目にチェックをしておくのを忘れないようにして下さい。最後に「Create repository」のクリックで作成は完了です。リモートリポジトリのアドレスが次の画面で表示されるため保存しておくことを忘れないようにしましょう。

5.ローカルリポジトリを作成すする

Windowsの場合は「PowerShell」、Macの場合は「ターミナル」で操作を行っていくといいでしょう。ディレクトリの作成を行ったら、「git init」のコマンドでローカルリポジトリの作成をします。

6.ファイルを作成する

ファイルの新規作成をして、ローカルリポジトリに作成を行います。任意ファイルをディレクトリの「test」に作成をします。

7.ローカルリポジトリにコミットする

先ほど説明した通り、コミットとはセーブポイントのようなものになります。作成したファイルをコミットしていきます。ファイルの作成を行ったら、「git add」でファイルをインデックスにコミットしましょう。この作業を行う事で、「git」で管理を行うファイルの対象となります。ここまで行えばリポジトリの登録は完了となります。

8.リモートリポジトリにプッシュする

送信を行う前に、「git remote」でリモートリポジトリへファイルの追加をしておきます。URLはgithubで作成したURLを使用してください。次に「git push」コマンドでリモートリポジトリへ送信を行います。コードネーム、パスワードを聞かれたら最初に登録した内容で入力を行ってください。これでプッシュし反映させることが出来ます。

GitHub(ギットハブ)は「SNS機能」や「先進的機能」が優れている

GitHub(ギットハブ)は様々な機能が備えられていますが、特徴的なのがSNS機能や先進的機能が優れているという点です。githubが多くの方に活用され人気が高い秘訣はこの優れた機能が大きな要因と言えます。SNS機能が充実しているため、変更履歴やソースコードまで、情報を一元化する事によって、これまで以上によりスムーズで円滑なユーザー同士のコミュニケーションを取ることが可能となります。

さらに、githubは下記のような機能を持ち合わせています。

Codespacesマイクロソフト社のフリーソースコード編集ソフトをオンラインで利用できる。(Visual Studio Code)
GitHub Actionsソフトウェアの開発から公開までの一連の流れをサポートしてくれる機能
GitHub Projectsプロジェクトのイシュー、タスクなど一覧管理できる公式機能

これらは一例になりますが、他にも様々な機能が充実しているのがgithubです。開発機能の使いやすさに加え、このような多くの機能が充実している先進的サービスに、多くのエンジニアが魅力を感じ開発に取り入れています。

GitHub(ギットハブ)の料金プラン

GitHub(ギットハブ)は先ほどもご紹介したように、無料プランと有料プランの2パターンがあります。基本的に無料で使用することが出来ますが、当然有料プランとのサービスに差が生じてしまいます。無料プランでも十分な機能が備わっていますが、2つの違いについて詳しく見ていきましょう。

無料プランでの制限とは?

まず無料プランでは、共同編集者の数が3名までという制限があります。また、github Pages、wiki、Protected branches、オーナー権限変更が出来ないという点があります。個人での利用では特に不便な部分はありませんが、チームで開発を行うという場合は難しい部分が出てきてしまうかもしれません。

また、本記事の冒頭でもお話ししたように、以前はプライベートリポジトリが作れませんでしたが、今では非公開のリポジトリも作成する事が可能となりました。そのため、今までは保存したリポジトリが全て公開されていた状態でした。

自身で手掛けたコードを公開する代わりに無料で使用できたという事です。ですが、今では無料版でも非公開での作成が出来るようになったため、個人に利用者や小規模開発の企業などで幅広く無料プランが使用されるようになりました。

有料プランの種類

GitHub(ギットハブ)の有料プランは複数の料金形態があります。それが「個人プラン」と「企業・官公庁・教育向けプラン」の2種類になります。

個人プラン無料プラン:proプラン・7ドル/月
企業・官公庁・教育向けプラン25ドル/月

個人向けの場合、先ほどご紹介した無料プランと、有料月額7ドルのProプランがあります。無料プランの機能に加え、Actions3,000分、プライベートブランチ保護などの様々な機能などが用意されています。

企業・官公庁・教育向けのプランは複数人のチーム利用が想定されたプランの用意もあります。チーム作業で便利な機能が充実しており、快適な開発環境を作ることが出来るでしょう。また、このプランよりもさらに上位のEnterpriseプランがありますが、こちらの月額に関しては問い合わせを行う必要があります。

GitHub(ギットハブ)にまつわるニュース

GitHub(ギットハブ)は世界中で注目されているサービスにです。そのため、githubに関するニュースが各国で報じられています。その中には、素晴らしいものもあればトラブルになってしまったというものもあります。ここで、そんなgithubにまつわる日本国内のニュースをご紹介致します。

LINE Payの情報が流出

2021年12月、LINE Payはgithub上に13万人以上もの一部決済情報が公開状態になっていたと発表を行いました。即座に情報は削除し、公開ユーザーには個別での案内を行いました。特に大きな被害や影響などは確認されてはいません。閲覧が可能となっていた情報は「ユーザー識別をするための識別子」「加盟店管理番号」「キャンペーン情報」の3点になります。名前や電話番号、住所、クレジット番号などの情報が公開されていたという事はありませんでした。

この3つの情報が閲覧可能状態だった期間は、2021年9月12日から2021年11月24日までで、外部アクセスがその期間で11件確認されています。9月12日、業務の委託先従業員がポイントの付与漏れを調査をするために使用したプログラムと対象の決済情報を無断でgithubにアップロードしたというのが原因とされています。その後、11月24日にモニタリング業務で該当情報が検出され同日中に削除が完了しました。30日にはアクセス状況の調査も完了したという事です。

経産省がGitHub(ギットハブ)を利用し民間からの意見を募集

経済産業省と特許庁は、2021年9月にAIの技術や新素材などに関連する契約書の見本の改訂版を作成するにあたり、githubを利用し民間からの意見を募集しました。経産省は、モデル契約書ユーザーかどうかは問わず、改善に向けたフィードバックを広く募集するため、不特定多数が編集する事が可能となるgithubを選択したと言います。モデル契約書について、githubで意見を募集したのは今回2回目になり、1回目は60件程度の意見のみしか集まりませんでした。

1回目はMarkdown形式で編集できるモデル契約書を公開し、データに対して修正案を直接提案することが出来るPull Request機能で行いましたが、2回目はIssueを活用し、より多くの方々と議論を行うために変更したという経緯があります。今のところ3回目以降の実施はないとの事ですが、他分野でgithubを利用して意見の募集を行う可能性はあると話しています。

まとめ

開発環境の改善、スムーズな開発作業などに必須ともいえるgithub。最初は専門用語が多くあるため、初心者や初めて利用するという場合は戸惑う事もあるかもしれませんが、慣れてくれば非常に活用しやすいサービスと言えます。個人はもちろん、チームを組んでの開発など様々な状況に対応させることが出来ます。

githubの利用はエンジニアには欠かせないスキルの1つと捉えてもいいでしょう。場合によっては、転職などにも有利になることもあります。まずは実際に試してみることをおすすめします。このようなサービスの場合、文章での説明を見るよりも、実際に自分で使用した方が流れや特徴を掴みやすくなります。本記事を参考にしつつ、ぜひインストールして活用してみましょう。

【システム開発・契約形態】システム開発の契約書の重要な役割とは?契約種類や契約書の記載例・注意点まで徹底解説!

「システム開発の契約書って大事なの?」

「システム開発に必要な契約書の書き方も見方も分からない…」

システム開発を行う上で最も重要になるのが契約書ですが、上記のようにシステム開発の契約書の重要性や本来の役割、作成の仕方に対しての知識が乏しく、本来の契約書の在り方について良く分かっていないという担当者は少なくありません。

システム開発の契約書があることで回避できるトラブルやリスクなどはもちろん、契約の種類による違いや必須となる義務などについて、本記事で詳しくご紹介致します。

これからシステム開発を行う、もしくは今まさに契約書の作成を行うという方に、ぜひ読んでいただきたい内容を多くご紹介しておりますので、しっかりと内容を理解し、正しく円滑なシステム開発が行えるよう万全の準備を整えておきましょう。

システム開発における契約書の役割

システム開発を行う際には、依頼した開発会社との契約を交わします。こうした契約書はシステム開発に限らず、会社同士で業務連携や協力体制を構築する際に必ず作成を行うでしょう。しかし、実はこの契約書は担当者によってはあまり重要視されておらず、様々な契約を数多く扱ってきた担当者の中には、契約書そのものをかなり軽く扱っているという事も少なくありません。

しかし、システム開発における契約書には非常に重要な役割があります。契約書を雑に扱い内容の把握が出来ていない場合、後々トラブルが発生した際に、さらに大きな問題へと発展していく事があります。そうならないためにも、契約書の役割をしっかりと認識し、何のために作成するのかを深く理解しておくようにしましょう。

スムーズなプロジェクト遂行のためのルール制定

システム開発の契約書の重要な役割として特に大切なのは、プロジェクトを円滑に進めるためのルールの制定です。食品やファッション、制作物などの形あるものの売買とは違い、最終的に完成する全体像のイメージが明確にできにくいという点があります。

そのため、依頼をした側、依頼を受けた側の間で認識のずれが生じやすくなってしまうという特徴があります。また、システム開発は仕様変更などが起こることも珍しくありません。そのため、当初の計画通りに進めるという事は困難になることが多々あるでしょう。

特に、長期間にわたり行われるプロジェクトなどの場合、経営方針の変更や組織変更、担当者の配置換えなどの社内環境の変化も大きく影響を及ぼします。こうしたシステム開発の特徴を踏まえ、想定された変更が生じた際にどう対処すべきなのかという事をあらかじめ決め、その内容を契約書に記しておくことで、システム開発の関係者全員に共通認識として把握させておくことが出来ます。担当者のみが把握しておくのではなく、開発に携わるすべての人材が理解しておくという事が何より重要と言えるでしょう。

法的リスク

法的リスクの軽減も、システム開発を行う上で外すことのできない重要な項目となるでしょう。契約書は、そのための重要な役割を担っています。民法規定は、「強行法規」「任意法規」の2つに分類されます。

  • 強行法規→当事者の意思や意見などに関わらず、強制的に適用される規定の事
  • 任意法規→当事者の間で合意がある場合、他の何よりもまず優先されるべき規定の事

例えば請負型の契約の場合、2020年に「瑕疵担保責任」が「契約不適合責任」に変更になったことにより、ベンダーが負う責任が従来よりもさらに重くなりました。これまでは納品物の引き渡しから1年以内が責任のある期間という事になっていましたが、契約不適合責任の場合、事実を知った時から1年という期間になります。そのため、納品を行い2年後に契約不適合と言う事実に気付いたという場合には、そこから1年以内ということになりますので、要は納品から3年経っていても責任を負う必要があるという事です。

契約不適合責任は先ほどお話しした任意法規になります。この任意規定の場合、法律によって定められている事項を自由に変えることが可能となっています。そのため、契約書に記載する場合、契約不適合責任は「契約不適合を知ったとき」にするのではなく、検収完了の時点やシステムが稼働した日などに設定を行ってくと、開発会社側の法的リスクを軽減させることになります。ここは双方でのすり合わせが重要となり、お互いが納得した上で取り決めるようにして下さい。この契約項目を正しく認識しておかなければ、大きなトラブルの火種となることがあります。

トラブルが生じた際の根拠

システム開発は、小さなすれ違いや認識の誤差から訴訟トラブルにまで発展する事があります。そのような場合に、契約書は訴訟に発展してしまった際に当事者の合意内容として機能するでしょう。こうした最悪な展開を予想し契約書の作成を行っておけば、後々になって慌てることなく冷静な対応が可能となります。システム開発での訴訟問題は珍しいことではありません。こうしたトラブルになる主な原因として挙げられるのが、納期遅延、仕様変更などにより追加作業を行った時の支払いによるトラブルです。

契約書に詳しく記載があれば、裁判所に対して双方がきちんと合意していたという事を客観的に示すことが可能となります。こうした具体的なトラブルを前もって想定しておき、その場合の対応の仕方、責任の所在を明確にしておくことにより、トラブルの素早い解決、無駄な争いを回避する事にも繋がると言えるでしょう。もちろんこうした事も、開発関係者はしっかり把握しておく必要があります。

システム開発の契約形態・種類とは?

システム開発は、見積もりの確認を行い契約を交わし開発スタートと簡単に進められるものではありません。契約そのものも種類があるため、それらをしっかりと把握し自社にとって何が最適な契約形態なのかという事を理解する必要があります。

システム開発の依頼をするためには、様々な条件の取り決めや見積書の項目確認など、開発を始める前準備というものが非常に多くありますが、契約形態によりその内容も異なってきます。

請負契約依頼された仕事を完成させる契約。完了した成果物に対しての報酬が発生する
準委任契約依頼された仕事を行う契約。法律に関わらない業務内容となり、労働時間分の報酬が発生する。
委任契約依頼された仕事を行う契約。法律に関わる業務内容となり、労働時間分の報酬が発生する。
混合契約開発システムの中の難しい部分は請負対象にし、比較的簡単な部分は準委任とするなどの組み合わせ型の契約方法。

基本的な契約形態は上記のような内容となります。それぞれの特徴をさらに深く知り、自社のシステム開発にはどのような契約形態がふさわしいのかをしっかりと見極めるようにして下さい。以下でそれぞれについて詳しくご紹介致しますので、知識を収集し、自社ITレベルやスキルなどを考慮しつつ、正しい契約形態を選択するようにしましょう。

請負契約

依頼した仕事が完了する事で報酬が発生する契約形態になります。依頼した業務の完成が約束された契約となり、依頼を受けた側は原則として仕事が完了するまでは報酬の請求を行う事は出来ません。完成した成果物の納品、検収を経ることにより完了したと認識されます。逆に言えば、納品を行っても検収が終わらなければまだ完了したとは言えません。

システム開発の場合は、そのプログラム本体が成果物として扱われることが一般的になります。もしも、この成果物の内容の中に各種設計書やシステム構成図、テストを行った際の結果報告書、ユーザーのマニュアルドキュメントなどというものの提出も望む場合には、契約書にその旨をしっかりと記しておく必要があります。双方で話し合い合意した上で、成果物の詳しい内容を取り決めておきましょう。

請負契約には「契約不適合責任」という義務があります。これは先ほどお話しした2020年の民法改正の際に変更になり、これは成果物の品質が前提条件などの契約に適していない事を意味します。請負契約を行った場合、開発を請け負った側はただ単に開発を行い成果物を納品するだけではありません。その開発を行ったプログラム、すなわち成果物の品質が、契約内容に適合しているという確かな保証をしなければいけないという事です。先ほどの説明でもあったように、成果物が不適合と発覚した場合、受託側がその責任を負うことになります。

準委任契約

仕事や業務の遂行に対する報酬が発生する契約形態です。請負契約のように成果物の納品、検収を経て支払いが生じるという事ではなく、時間や日数と言った期間を基準とし、その期間遂行された業務量、時間に対して報酬を支払うという事になります。準委任契約の場合、法律行為以外の業務を主とした契約となり、受けた側には完成義務が生じることはありません。

しかし、先ほどお話しした2020年の民法改正により、準委任契約の際にも成果物に対して報酬を支払う場合の制定が設けられました。そのため、請負契約と混同されてしまう事がありますが、支払いのタイミングや受託側の義務などは大きく異なっています。

請負契約の場合、支払いのタイミングは先ほど説明した通り検収完了時が基本となります。しかし、成果型の準委任契約の場合、支払いのタイミングは作業の完了時や引き渡しのタイミングとなります。ですが、準委任契約の責任が軽いという事では決してありません。請負契約は準委任契約の場合、「善管注意義務」というものがあります。

これは、SEやプログラマーとして期待されるレベルの業務を遂行する注意義務を果たさなければいけないという事です。成果型の場合、契約上で取り決めた成果物の納品が出来なかった際には損害賠償や契約解除などの債務不履行責任を負わなければいけなくなります。

準委任契約と委任契約

契約形態には「準委任契約」と「委任契約」があります。この2つの大きな違いは、表で表したように法律的な業務があるかないかという点です。準委任契約の場合は、依頼する側が法律以外の仕事を委託し、委任契約は法律関係の仕事を委任するという形になります。そのため、システム開発の契約の場合には、この委任契約で締結するのではなく、「請負契約」「準委任契約」のどちらかで行う事になるでしょう。

多段階契約と一括契約

システム開発を行うにあたり、スタートから完成の全てにおいて一括で請け負う「一括契約」と、開発を複数工程に分割し、工程ごとに個別での契約を行う「多段階契約」というものがあります。プロジェクト開始前というのはシステムの全貌がまだ明らかとなっていません。そのため、必要な工数や期間などを正確に見積もることが非常に難しいという点があります。そのため、一括契約は依頼をする側、依頼を受ける側の双方にとって適切ではないという事も十分あり得るでしょう。

過少規模での見積もりとなってしまう事もありますし、高額な見積もりの提示が行われてしまうという事もあります。このような場合、システム開発の全てを一気に契約してしまうのではなく、多段階契約にして段階を踏みつつ進めていくという方法があります。規模の大きなプロジェクトなどの場合は、一括契約よりも多段階契約の方がスムーズに開発を行う事が出来るでしょう。

多段階契約の場合、各フェーズの性質を考慮し契約類型の選択をすることが可能となります。着手前にある程度の成果物が具体的に想定できる場合は「請負契約」となり、特定させることが困難な場合は「準委任契約」という事になるでしょう。さらに、要件項目やテストなど、システム開発部門とベンダーが共同で作業を進めていくという場合は、準委任契約での契約を行う事が多くなります。

契約形態それぞれのメリット・デメリット

契約形態は大きく分けて「請負契約」「準委任契約」の2種類に分けられます。また、先ほどご紹介したように、多段階契約や一括契約などもあり、自社にとってどの契約形態で行えばいいのか悩んでしまうという事もあるでしょう。システム開発を行う場合、その契約形態ごとのメリット・デメリットをしっかりと把握し、自社の開発内容と照らし合わせて検討する必要があります。それぞれの内容をしっかりと理解し、正しい選択を行えるようにしておきましょう。

メリット

請負契約のメリット・求める成果物が手に入る
・コストの把握がしやすい
・縛られることが無い(受注側メリット)
準委任契約のメリット・労働力が確保しやすい
・仕様変更に柔軟な対応が可能
・完成しなくても報酬が発生する(受注側メリット)

上記のような内容が、それぞれの契約形態の主なメリットとして挙げられます。発注する側、受注する側双方にメリットは発生しますが、どちらの立場であっても、知識としてそれぞれの内容を把握しておくといいでしょう。請負契約のメリット、準委任契約のメリットを詳しくご紹介致します。

請負契約のメリット

求める成果物が手に入る→請負契約の場合、納期や成果物に関する具体的な取り決めを行ったうえで契約を行います。そのため、指定した基準を満たした納品がされるため、品質の安定が保証されています。万が一契約不履行があっても、修正依頼を行う事も可能ですので、「〇日までにほしい」「〇〇を納品してほしい」という場合は請負契約が適していると言えるでしょう。
コストの把握がしやすい→自社でシステム開発を行う場合、機能追加やエンジニアの増員によるコスト増加、トラブルのための想定以上の予算になるという事は少なくありません。請負契約であれば、発生するコストや開発人員の調整も受注側で行います。成果物に対する報酬はもちろんありますが、受注側の責任になるため余計なコストをかけることなく固定のコストで開発が可能となるためキャッシュフローが明確になります。
縛られることが無い(受注側メリット) →極端な話にはなりますが、「納期までに成果物が完成すればいいため自分のペースで仕事が出来る(もちろん、スケジュールや各フェーズに沿って開発するなど案件により様々です)」などというメリットがあります。請負契約では、発注側が指示を出す権利はありません。納期に間に合いさえすれば、時間やペースなどに縛られることなく作業を進めることが出来ます。

準委任契約のメリット

労働力が確保しやすい→例えば「システム管理を依頼したい」という要望の場合、準委任契約であればこの業務依頼のみを遂行してくれるエンジニアを効率よく確保する事が可能となります。契約の期間を細かく取り決めたうえで依頼することになりますので、多くの会社では繁忙期のタイミングに合わせて行っているという事よくあります。
仕様変更に柔軟な対応が可能→請負契約の場合、「〇〇日までに◇◇を納品」というような契約の形になりますので、一度契約を結んでしまうと発注側が後から納品物に対する指示を出すことは出来ません。準委任契約の場合、業務遂行のみでの契約内容であれば、こうした仕様変更などにも融通の利く契約形態と言えます。
完成しなくても報酬が発生する(受注側メリット) →メリットとして請負契約との違いと言えば、その報酬のタイミングです。準委任契約の場合、請負契約のような成果物がなかったとしても、これまでの業務遂行に対する報酬が支払われます。準委任契約は完成責任を問わない形になるため、完成してもしなくても、仕事を行えば行った分の報酬を受け取ることが可能となります。

デメリット

請負契約のデメリット・自社内エンジニアのスキルが上がらない
・仕様変更が困難
・「成果が絶対的条件」となる(受注側デメリット)
準委任契約のデメリット・納期アリの仕事には不向き
・契約内容が曖昧になりやすくなる
・仕事内容に決定権がない(受注側デメリット)

請負契約、準委任契約のどちらでも、当然メリットがあればデメリットも存在します。デメリットを前もって把握しておくと、もしもの際に落ち着いた冷静な対処が可能となりますので、しっかりと内容を把握しておくようにしましょう。以下で、それぞれの細かな内容についてご紹介致します。

請負契約のデメリット

エンジニアのスキルが上がらない→自社内でアプリやシステムの開発を行う場合、業務を行うと同時にエンジニアの成長やスキルアップを見込めますが、請負契約は「外注」という形での開発になるため、自社内のエンジニアの成長を促すことは困難と言えます。開発スキルやノウハウが自社内に蓄積することが出来なくなってしまうため、請負契約は必要な分だけの利用に留めるようにするといいでしょう。
仕様変更が困難→先ほど、準委任契約のメリットとして「仕様変更に柔軟な対応が可能」というお話をしましたが、請負契約の場合はそれとは逆に対応が困難という点があります。請負契約は「契約通りの成果物の納品」という仕組みになっているため、仮に設計に不備があったとしても、不備を抱えたままの成果物として納品されます。発注を行った後に変更や追加をこなうのは困難なため、契約を行う際に要件定義をしっかりと行っておくようにしましょう。
「成果が絶対的条件」となる(受注側デメリット) →検収・納品を行うまでは何が合っても報酬が発生することはありません。納期までに完成した成果物を納品する事が絶対的条件となりますので、完成し検収を行うまで受け取れるものは何もないという事になります。また、請負契約では契約不適合責任も負うことになります。納期厳守はもちろんの事、その責任は非常に重いという事を強く自覚する必要があるでしょう。

準委任契約のデメリット

納期アリの仕事には不向き→何度もお話しするように、準委任契約には仕事を完成させる義務というものがありません。仕様変更などといった柔軟性に長けてはいますが、納期がある契約には不向きと言えるでしょう。仮に納期までに完成品が上がらないという場合でも、受注側に責任はありません。こうした業務の結果に対しては、発注側に責任がある契約形態になるという事をしっかりと頭に入れておきましょう。
契約内容が曖昧になりやすくなる→業務上の「成果」というものが存在しないため、契約内容が曖昧になりがちという点があります。契約内容の認識のずれにより、業務遂行や報酬の支払いにおいて何かしらのトラブルが起きてしまうという事っ珍しくはありません。準委任契約を行う際には、報酬の支払い対象業務、契約有効期限などについて細かく取り決めを行い、相違がないように徹底しておくと安心です。
仕事内容に決定権がない(受注側デメリット) →準委任契約は、受ける仕事内容を決定することが出来ません。発注側から業務範囲を指定され、そこを忠実に行うという契約になりますので、得意分野での活躍が出来ない、作りたいものややりたい作業があっても選べないというデメリットが生じます。また、受二人契約ではシステム開発の一部工程のみの依頼のため、根幹にかかわるという仕事は非常に少なく、実力を発揮できないと嘆く方も多くいるでしょう。

担当者の3人に1人は契約内容の把握が出来ていない!?

システム開発の契約における内容は、実は多くの担当者がその全貌を全て把握できていないという事が少なくありません。実際、中小企業やベンチャー企業でのシステム開発依頼の際に、その契約書の内容を正しく全て把握できているという方は全体の30%弱となっており、実に7割以上の担当者は契約内容を完全に理解していないという実態があります。

3人に1人の割合で、契約内容を把握できていないという事になり、その内の4割以上の担当者は何かしらのトラブルに遭遇しており、契約締結に1か月以上かかってしまったという事もあります。

契約書の把握が出来ていない会社の開発で、最も多いトラブルが、「納期遅れ」「責任の所在」「成果物の質」の3つになります双方で作り込んだ契約書の内容を正しく完璧に博しておけば、こうしたトラブルを回避する事にも繋がりますが、実際は契約書は流し読み程度で終わってしまい、詳しいその中身を理解しているという方は非常に少ないのが現状です。

把握が出来ていない担当者と言うのは、新人に限った話ではありません。何度も同じようなシステム開発を依頼しているベテラン担当者であっても、その内容を把握できていないという方も多くいるでしょう。むしろベテランだからこそ、「確認しなくても大丈夫」「トラブルが起きた際はその都度対処できるから必要ない」と考えている方も珍しくありません。

そのため、契約書の内容をじっくり見て把握するという工程を省いてしまう事もよくあります。しかし、それではトラブル回避をスムーズに行うことが出来ません。また、いらぬトラブルを引き起こす要因にもなってしまうでしょう。契約書の内容はかならず把握し、開発に携わっている全ての関係者にも共有しておくようにしましょう。

契約書の様式の違いと記載例

IT業界では、こうしたシステム開発の契約書を作成する場合、「業務委託契約」「SES契約」という言葉をよく耳にするでしょう。しかし、実際これらは法律上に存在しない契約になります。ではどんなことを指しているのか。この「業務委託契約」「SES契約」というのは、すなわち本記事で紹介している請負契約や準委任契約などの契約形態の事となります。

システム開発の契約書は、成果物に対する知的財産権の帰属を明確化させ、保守管理、メンテナンス方法、月額料金などを定める必要があります。この保守管理などについては、別途の契約書作成を行ってもいいでしょう。さらに、双方の守秘義務に関する項目などについても明確にしておくと、いらないトラブルを回避することが出来ます。ここでは、請負契約と準委任契約の主な記載例をご紹介致します。

請負契約の契約書

請負契約の場合、「業務委託契約書」として締結されることが非常に多いため、このタイトルで契約書の作成を行っても問題はありません。業務請負と業務委託を区別するために、「業務請負契約書」とタイトルを付けるという事も多くあります。

  • ソフトウェア開発契約書(プログラミング)
  • システム構築契約書
  • デザイン制作契約書

上記のように、開発する内容に合わせたタイトル表記を行うという事も多くあり、一概にタイトルは「〇〇でないといけない」という決まりはありません。

また、請負契約の場合準委任と異なるのは先ほどもお話しした「契約不適合責任」です。

1 乙は甲に対し、甲が指定する仕様書通りの成果物が開発されていることを保証する。

2 前項の保証期間は納入日から3ヶ月とし、同期間内に前項の保証事項に反することが原因で成果物に不具合が生じた場合には、乙は、自らの費用と責任において改修作業を行うものとする。

3 成果物が第三者の特許権等又は著作権を侵害して、当該第三者より成果物の使用を差し止められた場合又は損害賠償を求められた場合、乙は、第4条に定める委託料総額を限度として、甲に生じた損害を賠償するものとする。

https://www.ys-law.jp/IT/450/45023/

上記の記載例の場合、「前項の保証期間は納入日から3ヶ月」と記してあります。ここの部分は、本記事の冒頭「システム開発における契約書の役割・法的リスク」でもご紹介した通り、保証期間がいつからになるのかははっきりと明記しておかなければいけません。納品をした日なのか、システムが稼働した日なのかにより、保証期間がいつまでになるのかが変わってきます。

準委任契約の契約書

準委任契約は、何度もお話ししたように完成義務が生じません。そのため、明確な目的物がない以上は瑕疵担保責任、契約不適合責任は負わないものとなります。しかし、その反面先ほどもお話ししたように準委任契約の場合は善管注意義務を負っていますので、持ち得る能力を最大限発揮し、期待されるレベルの仕事を全うする責任があります。

もしも職務怠慢、致命的ミスなどといったトラブルが発生し、この義務に違反してしまった場合、債務不履行に基づいて損害賠償の請求や契約解除などという事にも繋がるでしょう。完成義務は負わない代わりに、適切な業務を遂行したのかを確認するための作業報告書の提出が重要になります。

第〇条 乙は、前条に定める要件定義書の確定後○日以内に、業務終了報告書を作成し、甲に提出する。

甲は、個別契約に定める期間(以下「要件定義作成支援業務終了の点検期間」という。)内に、当該業務終了報告書の確認を行うものとする。

甲は、当該業務終了報告書の内容に疑義がない場合、業務終了確認書に記名押印の上、 乙に交付し、要件定義作成支援業務の終了を確認するものとする。

要件定義作成支援業務終了の点検期間内に、甲が書面で具体的な理由を明示して異議を述べない場合には、甲は要件定義作成支援業務終了の点検期間の満了をもって、業務の終了を確認したものとみなされる。  

https://monolith-law.jp/corporate/system-development-contract-check-quasi-mandate

上記記載のように、業務終了報告書の提出義務についてしっかりと定めており、報告書の確認が遅れることの無いように点検期間まで明確に記してあります。また、業務終了は「業務終了確認書に記名押印の上、 乙に交付し、要件定義作成支援業務の終了」と定められており、ユーザーの記名と押印がなければ業務終了とはなりません。

また、最後は書面に対する異議がなかった場合のみなし終了確認について記されています。ここは非常に重要で、何かしらの理由から確認手続きを怠ってしまった場合、後の作業に遅れが発生してしまったり確認の有無をしないままに次の作業へ移ってしまったという場合に、双方の責任が曖昧になってしまうという事を避けるために記してあります。具体的な理由の提示と異議がない場合にのみ業務終了となり、仮に異議があるという場合は業務終了にはなりません。

契約書に記載するべき主な項目

次に、契約書に記載すべき重要な項目についてご紹介致します。何度も言うように、契約書は非常に重要な書類です。そのため、その内容はしっかりと作り込み双方にとって納得できるものにする必要があります。ここで紹介する項目は、契約書の作成があるにもかかわらず、特に問題が生じやすい項目となりますので、内容の把握、理解を深め、トラブルを未然に防げるよう正しい記載を行うようにして下さい。

開発・設計対象の範囲

開発や設計の対象となる範囲は明確にしておきましょう。仮にプロジェクトの開発途中で仕様変更などがあった際、発注側が契約書に記載されている範囲を超えているという認識をしてもらうことで、受注側は追加費用の正当な請求を行うための根拠になります。曖昧な表現での記載は極力避け、専門用語には説明を加えるなどの方法で明確に記しておくようにして下さい。双方で共通の認識が出来るよう、表現は客観的に行うといいでしょう。

損害賠償の期間や上限額

請負契約の場合、民法改正により瑕疵担保責任から契約不適合責任へと変化し、損害賠償期間の起算点が変わりました。最初は適切に稼働していたとしても、納品から数年たって普段使用しない機能などにバグが見つかるという事も少なくありません。そのため、受注側は長期にわたり損害賠償責任を負うという事になります。これは受注側には大きなリスクとなるでしょう。また、発注側も、損害賠償期間をハッキリとさせることで、システムに関する責任の所在を明確にさせることが出来ます。

契約不適合責任の起算点を「納品完了日」とするか「システム稼働日」とするかは、双方でしっかりと話し合い、お互いに納得した上で記載するようにして下さい。また、仮に契約不適合責任を追及された場合、その損害賠償金額においての上限額も決めておきましょう。一般的には、契約書に記載案件の報酬金額を上限とすることが多くあります。

協力義務

要件定義は、プロジェクトを成功へ導くために非常に大きな影響を及ぼします。業務の流れや課題をできる限り正確に把握する必要があり、業務内容を熟知している担当者の協力は必須と言えるでしょう。ですが、中には開発は丸投げすればいいと考えている企業も少なくありません。そのため、契約書の中で協力義務に関する記載をし、受注側は義務として課せられているという事を強く認識する必要があります。

著作権

特に大きなもめごとに発展してしまうのが著作権です。開発したシステムの著作権をめぐり、受注側と発注側がトラブルを起こしてしまうという事は珍しくはありません。そのため、契約書に著作権の帰属について明確に記載しておくようにしましょう。ここもまた、曖昧な表現で分かりにくいと後々になってトラブルになってしまいますので、著作権はどちらになるのかをハッキリ記載しておくようにして下さい。凡用的に活用できるものであれば受注側、その他に関しては発注側に帰属するなどバランスを見て決めるといいでしょう。

変更管理手続き

システム開発案件では、仕様変更などによる追加の作業というのは少なくありません。そのため、仕様変更によって工数が増加した場合などの手続きを明確に提示しておくと、大きなトラブルを回避することが出来ます。この際には、仕様変更により追加作業が発生した場合の費用負担などについても明記しておきましょう。金銭的な問題は、大きなトラブルを起こす要因になります。そのため、契約書に明記し事前に追加作業が発生した場合の対応について双方で認識を共有しておくことが重要です。

「経済産業省」が公表しているモデル契約書を参考に

実際に契約書を作成する場合、経済産業省が後悔している「情報システム・モデル取引・契約書」を参考にするといいでしょう。モデル契約書と呼ばれており、第一版は2007年に公開されました。これは大規模案件向けの内容でしたが、2018年には中小企業などの比較的小規模な案件を盛り込んだ追補版が公開され、さらに2019年には、民法改正に対応した最新のモデル契約書が公開されました。

実際の案件の内容を落とし込み、それに合わせた規定を盛り込むなどして作成を行うようにするといいでしょう。その際、今お伝えした特にトラブルとなる内容については、入念な話し合いやミーティングなどを行い、受注側と発注側のどちらかのみに有利になることの無いようにする必要があります。

契約の際に注意すべきポイント

契約を行う上で、特に注意すべきポイントを3つご紹介致します。契約書を作成して開発依頼を行ったとしても、何かしらのトラブルは起こってしまうでしょう。そういった場合、大きなトラブルに発展させないため、また、問題を早期解決させるためには契約の際に注意すべき大事な項目があります。契約書はこうしたイレギュラーな場面でその効力を大きく発揮します。もちろん、何のとあブルもなくスムーズな開発が行われることが一番の理想ではありますが、前もって回避するためにはどうすべきか、契約前に何を行うべきなのかをよく理解し、受注側、発注側双方が気持ちいい仕事が行えるようにしておきましょう。

契約書の内容について詳しく精査し把握する

システム開発におけるトラブルは、その多くが契約書の確認不足から起こります。そのため、再度しっかりと内容を精査し、項目それぞれをよく把握するようにして下さい。

  • 実態に即した内容となっているか
  • 自社のリスクは最低限となっているか
  • 内容が合理的・公平になっているか

主となるのは上記3点です。それぞれを強く意識し、契約書の確認を行うようにして下さい。以下でその内容について詳しくお伝えいたします。

実態に即した内容となっているか契約書は実際のプロジェクト内容に即していなければ意味がありません。案件の難易度、発注側のITレベルなどを考慮し、起こりうるトラブルを想定し、必要な項目に抜けや誤りがないかよく確認しましょう。
自社のリスクは最低限となっているか実際にトラブルが起きた際、受注側、発注側双方の責任の所在はもちろんの事、その際のリスクは最低限で収まっているか確認が必要です。時に重要なのが、何度もお話ししている不適合責任と損害賠償金の項目となります。
内容が合理的・公平になっているかリスクを抑えることも重要ですが、一方に有利な契約書になっていないかよく見ておきましょう。予定工数が完了したら完成していなくても業務終了となるような記載がある場合もありますが、裁判ではこうした事は無効と判断されることもあります。公正な規定かどうかをよく見ておくようにして下さい。

契約内容について双方が正しく理解しているか確認する

契約書を作成し開発がスタートしてから、実は契約書の内容を把握していなかったという事は珍しくありません。本記事でもお話しした通り、担当者の3人に1人は契約内容の把握が出来ていないという現状があります。もしも開発途中で何かしらのトラブルが起きた際、内容を把握できていなければ、「そんな話は聞いていない」「責任はこちら側は取らない」などという大きなトラブルになってしまうでしょう。

契約書の内容は、双方の責任者が同席した際に読み合わせを行い、不明点がないかしっかりチェックしておくようにしましょう。その際、何かしら疑問点などがあればその場で解決し、お互いの認識の違いをなくすようにして下さい。責任者は、契約書の内容をプロジェクトに携わる全員に内容を共有し、自社内でも情報のずれがないように徹底しておく必要があります。

会議内容は必ず記録する

トラブル回避のためには、ミーティングや打ち合わせなどの会議の記録を残しておくことが非常に大切です。システム開発案件の場合では、ベンダーはシステム開発のプロとして、発注側企業の意見を聞きながら開発作業を行う「プロジェクトマネジメント義務」というものがあります。会議の記録などは、このプロジェクトマネジメント義務を正しく果たしたという確固たる証拠になります。また、会議の記録はどこでどのような話が行われどう進んでいったのか、この意見はいつ出されたのかなどと言った進行具合もお後から確認することが出来ます。

そのため、「言った・言わない」論争が起こることなく、スムーズに開発までの道のりを進んでいけるようになるでしょう。こうした記録はミーティング後の数日以内に作成を行い、開発メンバーにメールなどで送り内容の相違がないかよく確認をしておくようにして下さい。この際、口頭で伝えるだけでは受け取り方に違いが出てしまったり、記憶違いで正しい確認が出来ないという事が起きてしまいますので、必ず書面にし、保存できるようにしておきましょう。

現在のシステム開発に多い契約形態とは?

現在のシステム開発の契約形態は、多くが「請負型」「混合型」となっています。そのため、システム開発を受注する企業は成果物責任に対するリスク管理が必要不可欠となっています。発注側も、こうした受注側が負うリスクに対する知識を深めておくようにしましょう。また、発注側は開発依頼の範囲や、追加作業における費用などについても良く理解しておく必要があります。

「契約書にはこう書いてあるからこれ以外の費用は払いません」となれば、追加の作業は行ってもらえなくなりますし、最悪の場合訴訟問題にまで発展してしまいます。本記事で紹介した注意点やポイントをよく理解し、大きなトラブルを未然に防ぎつつ、円滑なシステム開発が行えるようにしていきましょう。

まとめ

システム開発は契約1つで大きなトラブルを招いてしまう非常に難しい依頼となります。しかし、契約書を正しく正確に作成することが出来れば、問題も小さく収めることが出来、早期解決や双方の負担を最小限にとどめることが出来るでしょう。

  • 契約書の役割の認識
  • 契約形態の把握
  • メリット・デメリットの理解
  • 契約書に記載すべき重要な項目と注意点

上記内容に対する知識をよく深くし、受注側・発注側共に効率よく円滑なシステム開発を行っていきましょう。正しく綿密に精査された契約書であれば、双方の関係をよりよいものとするための役割も果たしてくれます。システム開発の契約書やその内容に対して疑問点や不安なことなどがあれば、曖昧なままにせずしっかりと1つ1つを解決しながら契約を進めていくようにしましょう。

【アプリ開発におすすめの言語は?】アプリの種類ごとに適した言語を徹底解説|フレームワークやアプリ開発を学ぶ方法についても

アプリ開発する時に必要となるプログラミング言語。開発したいアプリケーションに適したプログラミング言語を選定し、適切に使用することが大切です。また、プログラミング言語だけ理解してもアプリケーション開発はうまくいきません。それぞれの言語に合ったフレームワークについても理解を深めることが必要です。

本記事では、アプリケーションの種類ごとに適したプログラミング言語をはじめ、フレームワークやアプリケーション開発を学ぶ方法についても徹底解説致します。

アプリケーションの種類

アプリケーション開発を行う時には、基盤となるプラットフォームについて理解する必要があります。このプラットフォームの種類により、利用するプログラミング言語も変わってくるためです。アプリケーションはプラットフォームによって大きく次の3種類に分けることができます。

種類概要
WebアプリWebブラウザ上で動作YouTube
Skype  など
ネイティブアプリスマートフォンやPCにインストールして利用App StoreやGoogle Playからインストールして利用するアプリケーション
ハイブリットアプリWebアプリ及びネイティブアプリ両方の特徴を持つGmail
Instagram
Twitter
Amazon App Store
Apple App Store など

上記3種類のアプリケーションには、それぞれのメリットやデメリットをはじめ、適したプログラミング言語がありますので、解説致します。

Webアプリの特徴

Webアプリは、Webブラウザ上で使用することが可能なアプリです。日常的に使用しているデバイス及びインターネット環境さえ整っていれば使用することができるため、アプリケーションをインストールしていなくても利用可能です。

混同しがちなのがWebサイトですが、Webサイトはあくまで提供される情報を読み情報取集を行うだけであるのに対し、Webアプリに関しては、それぞれのユーザーがアプリのケーションの機能を使用し、コメントや投稿、商品の購入等を行うことが可能となっています。

Webアプリのメリット

Webアプリのメリットとしては、次の3点が挙げられます。

  • アカウントを作成するだけで様々な端末で使用することが可能
  • 情報制限がないため様々なコンテンツの提供が可能
  • 常に最新情報の表示が可能

Webアプリにおいては、アカウントを1つ作成するだけで、家ではPCで使用しているサービスを外出時にはスマートフォン端末等で使用することが可能であるため便利であると言えます。

後述するネイティブアプリやハイブリットアプリに関しては、App Store及びGoogle Playストアに掲載する際やバージョンアップ版を更新する際にも都度Apple社及びGoogle社の審査が必要となりますが、Webアプリに関しては、自分の好きなタイミングであらゆるコンテンツを提供することが可能です。

さらに更新に関しても、サーバーで一元管理されていることから、プログラム更新を行うだけで常に最新のバージョンを使用することが可能です。

Webアプリのデメリット

一方でWebアプリのデメリットとしては、次の3点が挙げられます。

  • ネイティブアプリと比較し動作が遅い上スムーズに操作しにくい
  • インターネット環境が整備されていなければ利用不可能
  • 端末機器が保有する機能は利用不可能

Webアプリは、Webブラウザを介して利用することから、スムーズな動作が困難であると言えます。

また、当たり前のことではありますが、インターネット環境が整備されていなければ利用することが不可能であることから、オフラインで使用可能なアプリも作成不可能です。

さらにPC及びスマートフォン端末等が保有しているカメラ機能やGPS機能といった独自機能をフル活用したアプリケーションを作ることが不可能であるということが挙げられます。

Webアプリ開発に適した言語

Webアプリは、フロントエンド及びバックエンドの2つに分けて開発していきます。本項目では、それぞれの開発の特徴及び使用する言語について詳細を解説致します。

フロントエンド

フロントエンドとは、Webサービス及びWebアプリケーションでユーザーの目に直接触れる部分のことを指します。具体的にはユーザーが文字入力する部分やボタンをクリックする部分、さらにはバックエンドのソフトウェアと直接やり取りを行う部分のことです。

フロントエンドを開発する際には、主に次の3つの言語を用います。

言語英語表記概要
HTMLHyper Text Markup LanguageWebページを作成するためのマークアップ言語
ハイパーテキストというハイパーリンクの埋め込みが可能な高機能なテキスト
PC及びスマートフォン端末で見ている画面は、基本的にHTMLを使用し印をつけることで文字及び画像あるいは表等のデータファイルを表示している
CSSCascading Style SheetsWebページのスタイルを指定するためのスタイルシート言語
HTMLと組み合わせて使用
Webページの表示スタイル(色、サイズ、レイアウト等)や、プリンタ等の機器で出力する際の出力スタイル等を指定することが可能
Java ScriptJava ScriptWebサイトに動きをもたせるために開発されたプログラミング言語
大抵のWebサイトに使用されている
Webページの動作、Webアプリ開発、ネイティブアプリ開発、ゲーム開発等に活用

Webアプリ開発におけるフロントエンドでは、上記の言語3種類どれか1つだけで開発することはできず、3種類全てを組み合わせて開発しなければならないので注意が必要です。

バックエンド

バックエンドとは、ユーザーの目には見えないサーバーサイド及びデータベースのシステム部分のことを指します。具体的にはユーザーが入力した内容等のデータ処理及びデーターベースの保存、さらには検索結果の出力といったことを行う部分です。

バックエンドを開発する際には、主に次の5つのプログラミング言語を用います。

プログラミング言語英語表記特徴
PHPPHP:Hypertext Preprocessor動的なコンテンツを作成する際に向いているプログラミング言語
同一のURLであったとしてもユーザーの属性及び時間帯等によって表示内容が変化するコンテンツ
HTMLと組み合わせることも可能
基本的な文法を覚えるだけで簡単なプログラムを書くことができるため、プログラミング初心者におすすめ
RubyRubyアプリケーションソフトウェアを作成するためのプログラミング言語
食べログやクックパッド等のサイトもRubyを用いて開発された
フリーソフトウェアであり複製及び変更、再配布も可能なことからプログラミング初心者におすすめ
PythonPythonオープンソースで運営されているプログラミング言語
組み込み開発及びWebアプリケーション、デスクトップアプリケーション、人工知能AI等の最先端分野の開発に使用
C言語との相性が良い
コードを書きやすくかつ読みやすくするために生み出されたため、誰でも同じようなコードを書くことが可能
JavaJavaC言語をベースに開発されたプログラミング言語
サーバーからPCやスマートフォン端末等のプラットフォームの環境の違いを理解し、プログラムの実行内容に差異が生じないように共通動作を実現
GoGoGoogleが開発したプログラミング言語
シンプルでありながら高速処理が可能
誰が呼んでも理解可能なプログラムを書きやすいため複数人でのコーディングを行いやすい

ネイティブアプリの特徴

ネイティブアプリとは、アプリケーションストア経由でOSにインストールし使用するアプリケーションのことです。それぞれのOSに合わせた設計がされていることから、動作の軽さ及び簡単に操作が可能であり、さらに素早く起動することが可能です。

ネイティブアプリは大きくスマホアプリとPCアプリに分類されますので、それぞれについて解説致します。

ネイティブアプリ(スマホ)のメリット

ネイティブアプリ(スマホ)のメリットとしては、次の2点が挙げられます。

  • オフラインでも動作
  • 端末機器が保有する機能を利用可能

PC及びスマートフォン端末等に直接インストールを行うため、インターネット環境が整備されていないオフラインであっても動作し、さらに端末が元々保有するカメラ及びGPS機能等もフル活用することが可能です。

ネイティブアプリ(スマホ)のデメリット

一方でネイティブアプリ(スマホ)には、次の3点のデメリットが挙げられます。

  • アプリケーションストアの審査がある
  • OSアップデートの影響を受ける
  • iOS及びAndroidでは、別のプログラミング言語を使用するため工数がかかる

ネイティブアプリは、Apple Store及びGoogle Play等のアプリケーションストアを介することから、リリース時及びアップデート時毎に審査があります。さらにOSアップデートの影響も大きく、場合によってはバグなどの不具合を起こしてしまうことも少なくありません。

さらにiOS及びAndroidでは別のプログラミング言語を使用しているために、それぞれの言語で開発を行う必要があり、工数が余計にかかってしまいます。

ネイティブアプリ(スマホ)開発に適した言語

ネイティブアプリ(スマホ)を開発する際、OS毎に適した言語が異なりますので解説致します。

iOS

プログラミング言語特徴
Objective-CC言語にオブジェクト指向プログラミングを邪脳にする仕様を追加した言語
C言語で記述されたプログラムは有効なプログラムとして扱うことが可能
SwiftApple社が生み出したプログラミング言語
Objective-C言語にも簡単に組み込むことが可能
iOS及びMacのアプリケーションは全てSwiftで開発可能
Objective-CやRuby、PythonやJava等の言語の特徴が少しずつ取り入れられているためわかりやすい

Android

プログラミング言語特徴
JavaC言語をベースに開発されたプログラミング言語
サーバーからPCやスマートフォン端末等のプラットフォームの環境の違いを理解し、プログラムの実行内容に差異が生じないように共通動作を実現
Kotlin静的型付けのオブジェクト指向プログラミング言語
静的なnull安全が保証
言語構文はJavaとは互換性はないが、Java VM上で動作することからこれまでのJavaの知識の多くを流用することが可能

応用編:iOS・Androidを同時に開発する時

iOS及びAndroidどちらにも対応したネイティブアプリを同時に開発したい時には、次の2つのフレームワークを利用することでほぼワンソースで開発することが可能です。

フレームワーク特徴メリットデメリット
Flutterモバイルアプリフレームワーク
Googleが開発したDartというJavaSprictの問題点を改善し置き換えるための言語を使用
従来のモバイルアプリ開発が直面していたあらゆる問題に対処可能
開発効率が高い
コストパフォーマンスが高い
プログラムを変更した際にUIに反映可能なホットリロード機能が使用可能
OS毎の独自搭載の機能に関しては個別に開発が必要
歴史が浅いため使いこなせるエンジニアが少ない
React Nativeモバイルアプリフレームワーク
JavaScript言語を使用
効率的に開発可能
プログラムを変更した際にUIに反映可能なホットリロード機能が使用可能
頻繁にアップデートが行われるため対応に手間取る
エラー解決しにくい

ネイティブアプリ(PC)のメリット

ネイティブアプリ(PC)のメリットとしては、次の2点が挙げられます。

  • 端末が保有する機能をフルに活用可能
  • オフラインでも使用可能

ネイティブアプリ(スマホ)同様、端末が保有する機能をフルに活用することができ、インターネット環境の整備されていないオフライン下でも使用可能となっています。

ネイティブアプリ(PC)のデメリット

一方でネイティブアプリ(PC)のデメリットとしては、次の2点が挙げられます。

  • 需要が減少している
  • OSアップデートの影響を受けやすい

スマートフォン端末の需要が伸びていることから、ネイティブアプリ(PC)自体の需要が減少してきていることが大きなデメリットと言えるでしょう。また、ネイティブアプリ(スマホ)と同じくOSのアップデートの影響を大きく受けてしまいます。

ネイティブアプリ(PC)開発に適した言語

ネイティブアプリ(PC)は、WindowsとMacのアプリに分類されるため、それぞれの開発言語も異なりますので解説致します。

Windows

プログラミング言語特徴
VisualBasicMicrosoft社がBASIC言語を元に自社ソフトウェア製品のために開発したプログラミング言語
グラフィック表示のWindowsアプリケーションを簡単に開発可能
マウス操作で設定していくことで開発可能
コードを1行ずつ書き込む必要がない
C言語1972年に開発されたプログラミング言語
世界中に普及
C ++やC#はC言語から発展
汎用性が高い
プログラミング実行速度が高い
習得難易度が高い
C ++C言語にオブジェクト指向を加えた言語
C言語と互換性がある
処理速度が速い
C#C言語にオブジェクト指向を加えた言語
Javaと文法が似ているためどちらかを扱った経験があればもう片方も簡単に扱うことが可能
初心者でも使用しやすい
JavaC言語をベースに開発されたプログラミング言語
サーバーからPCやスマートフォン端末等のプラットフォームの環境の違いを理解し、プログラムの実行内容に差異が生じないように共通動作を実現

Mac

プログラミング言語特徴
SwiftApple社が生み出したプログラミング言語
Objective-C言語にも簡単に組み込むことが可能
iOS及びMacのアプリケーションは全てSwiftで開発可能
Objective-CやRuby、PythonやJava等の言語の特徴が少しずつ取り入れられているためわかりやすい
Objective-CC言語にオブジェクト指向プログラミングを邪脳にする仕様を追加した言語
C言語で記述されたプログラムは有効なプログラムとして扱うことが可能
JavaC言語をベースに開発されたプログラミング言語
サーバーからPCやスマートフォン端末等のプラットフォームの環境の違いを理解し、プログラムの実行内容に差異が生じないように共通動作を実現

ハイブリッドアプリの特徴

ハイブリッドアプリは前述したWebアプリとネイティブアプリそれぞれの要素を兼ね備えているアプリケーションのことを指します。具体的には、アプリケーションの見た目や外側に関しては、ネイティブアプリと変わりませんが、中身に関してはWebアプリとなっています。

ネイティブアプリと同じようにアプリケーションをスマートフォン端末等にインストールして使用しますが、コンテンツに関してはWebアプリと同じようにWebから参照することになります。

ハイブリッドアプリのメリット

ハイブリッドアプリのメリットとしては、次の3点が挙げられます。

  • 端末が保有する機能をフルに活用することが可能
  • 少ない工数で開発可能
  • OSアップデートの影響が少ない

ハイブリッドアプリは、1つのアプリケーションを開発することでiOS及びAndroidどちらにも対応したアプリケーションを作成することが可能です。そのため、少ない工数かつ低コストで効率よくアプリケーション開発が可能となっています。さらにネイティブアプリよりもOSアップデートの影響が少ないとも言われています。

ハイブリッドアプリのデメリット

一方でハイブリッドアプリのデメリットとしては、次の2点が挙げられます。

  • アプリケーションストアの審査がある
  • ストアからインストールする必要がある

ハイブリッドアプリは、前述したネイティブアプリと同じように、Apple StoreやGoogle Playストアを介してインストールする必要があります。そのため、リリース時及びバージョンアップ時には都度審査があります。

ハイブリットアプリ開発に適した言語

ハイブリッドアプリを開発する際に適した言語は、次の5つが挙げられます。

言語英語表記特徴
HTMLHyper Text Markup LanguageWebページを作成するためのマークアップ言語
ハイパーテキストというハイパーリンクの埋め込みが可能な高機能なテキスト
PC及びスマートフォン端末で見ている画面は、基本的にHTMLを使用し印をつけることで文字及び画像あるいは表等のデータファイルを表示している
CSSCascading Style SheetsWebページのスタイルを指定するためのスタイルシート言語
HTMLと組み合わせて使用
Webページの表示スタイル(色、サイズ、レイアウト等)や、プリンタ等の機器で出力する際の出力スタイル等を指定することが可能
JavaScriptJavaScriptWebサイトに動きをもたせるために開発されたプログラミング言語
大抵のWebサイトに使用されている
Webページの動作、Webアプリ開発、ネイティブアプリ開発、ゲーム開発等に活用
PythonPythonオープンソースで運営されているプログラミング言語
組み込み開発及びWebアプリケーション、デスクトップアプリケーション、人工知能AI等の最先端分野の開発に使用
C言語との相性が良い
コードを書きやすくかつ読みやすくするために生み出されたため、誰でも同じようなコードを書くことが可能
ScalaScalaオブジェクト指向言語及び関数型言語の特徴を持つハイブリッド言語
Javaでできることは全てできる
JVM(Java Virtual Machine)というJava仮想マシン上で動作するため、OSを気にしてプログラミング処理を行う必要がない

フレームワークとは

フレームワークとは、アプリケーションを開発する際、土台として機能させるソフトウェアのことを指します。

アプリケーションを開発するためには、前述してきたプログラミング言語を駆使するだけでは、工数が多く膨大な時間とコストがかかってしまいます。0からアプリケーションを開発するのではなく、土台としてのフレームワークを活用することで、効率的にアプリケーション開発を進めることが可能です。

プログラミングとフレームワークの違い

混同してしまいがちなプログラミングとフレームワークですが、プログラミングの中にフレームワークが包括されていると考えましょう。具体的には、プログラミングはコンピューターに動作を行うために指定をする情報処理のことであり、フレームワークはプログラミングに効率的な機能を付加することです。

プログラミングにフレームワークを活用するメリット

プログラミングにフレームワークを活用するメリットとしては、次の3点が挙げられます。

  • ミスやエラーを減らすことが可能
  • 開発スピードの向上
  • コードの読みやすさ

プログラミングにフレームワークを活用することで、コーディング量が減ります。そのため、単純にミスやエラーの確率が減ります。さらに付随して開発スピードが向上します。特に開発に必要な機能がテンプレートとして存在しているため、0から開発する必要がないのです。

また、複数人のエンジニアが携わる場合、それぞれのエンジニアによってコードの書き方が異なる場合があり、コードが読みにくいということが発生します。しかし、フレームワークを活用することでコードの書き方だけでなく、ルールが統一されるため、誰でもコードが読みやすくなるというメリットがあります。

プログラミング言語別おすすめのフレームワーク

これまでご紹介してきたプログラミング言語に対して、おすすめのフレームワークは異なります。詳細を解説致します。

Rubyのフレームワーク

フレームワーク特徴
Sinatra「楽しもう」というコンセプトの元作られたフレームワーク
シンプルかつ最小限の制約しかないことから初心者向け
Ruby on Rails略してRailsまたはRoRと呼ばれることが多い
簡単なコードのみでWebアプリケーションの開発が可能
処理速度は遅いため大規模なデータを扱う開発には不向き
PadrinoSinatraをベースに作成されたフレームワーク
Sinatraの本質に忠実でありながらも、複雑なアプリケーションに適したものにするためのツール及びヘルパー、コンポーネントの標準ライブラリを作成可能

JavaScriptのフレームワーク

フレームワーク特徴
Vne.jsシンプルで自由度が高い
生産性が高い
他のライブラリとの組み合わせを自由に選択可能
人気のあるフレームワーク
AngularJSGoogleが提供するオープンソースのフレームワーク
扱いやすく優れた機能性を持つ
Express.jsJavaScriptを実行する環境の1つであるNode.jsを使いやすくするためのフレームワーク
フロントエンド及びバックエンドどちらに関しても1つの言語のみで実行することが可能

Javaのフレームワーク

フレームワーク特徴
Spring Frameworkオープンソースのフレームワーク
AOP(アスペクト指向プログラミング)とDI(依存性の注入)という概念で構成されているため、シンプルにプログラムをまとめることが可能かつ修正や改修が容易
専用のテストプログラムが存在
Play FrameworkJavaとScalaを使用して作られたフレームワーク
Ruby on RailsやDiangoから影響を受けているため似ている
アプリ開発をスピーディーに進めることが可能
JSFJakarta EE(Javaを使用したWebアプリ開発のプラットフォーム)に搭載されたフレームワーク
高性能なWebアプリのインターフェースを作成可能

CSSのフレームワーク

フレームワーク特徴
FoundationZURB社によって開発されたフレームワーク
高いカスタマイズ性を誇る
デザインを高速化可能
デバイスに関わらず見栄えのするアプリケーション等を簡単に設計可能
BootstrapTwitter社がTwitterを開発するために用意したフレームワーク
パーツ及びテンプレートが豊富
レスポンシブデザインに対応
UIkit高速かつ強力なWebインターフェースを開発するためのフレームワーク
高いデザイン性を誇る
テンプレートをそのまま使用しても美しいと評判

PHPのフレームワーク

フレームワーク特徴
CakePHPサーバー設定及び動作環境整備がほぼ不要
日本語の学習サイトが豊富
ケーキを焼くように簡単にアプリケーションを開発することが可能
bake機能という対話形式の質問に回答するだけ手プログラムの自動生成が行われる開発速度向上に役立つ機能が搭載
FuelPHP様々なPHPフレームワークの良い点を取り入れたフレームワーク
PHP5.3以上を対象とし高速かつ軽量である
高度なWebアプリケーションの開発に向いている
使用される際に必要なクラスだけを読み込むためメモリ容量を抑えることが可能かつ高速に動作
LaravelSymphonyというフレームワークを踏襲し開発されたフレームワーク
複数人での分業開発が容易
コードが理解しやすい
プログラムの高い拡張性を誇る

Pythonのフレームワーク

フレームワーク特徴
Flask小規模向けの簡易なWebアプリケーション開発に適したフレームワーク
マイクロフレームワークとも呼ばれフレームワークに実装されている機能が少なくアプリ開発を学ぶために適している
実証実験を行ったり、デモ用のプロダクトの開発を行なったりする時に採用
Django高品質なWebアプリケーションを簡単に最小限のコードで作成可能
高速な動作を誇る
セキュリティ面も安心
容易にメンテナンスが可能
プラットフォームの選択は自由

アプリ開発を学ぶ方法

アプリケーション開発には、プログラミング言語をはじめ、フレームワーク等の専門的な知識が必要です。1からアプリケーション開発を学ぼうと考えた時には、次の3つの方法があります。

  • プログラミングスクールを利用
  • 独学で学ぶ
  • 学習サイトを利用

経済面である程度の余裕があるという場合には、プログラミングスクールを利用し学ぶことがおすすめです。この場合、元々システムに関する知識が乏しくても専門の講師から手取り足取り学ぶことができるというメリットがあります。

しかし、経済的な余裕がないといった場合には、独学で書籍を読み漁ったり、学習サイトを利用したりして学ぶことが必要です。この場合には、有名なプログラミング言語やフレームワークであればソースはたくさんありますが、マイナーなプログラミング言語やフレームワークの場合ソースが少なく学ぶのは難しいといったデメリットがあることを覚えておきましょう。

まとめ

アプリ開発におすすめの言語について、アプリケーションの種類ごとに適したプログラミング言語をはじめ、フレームワークやアプリケーション開発を学ぶ方法について解説致しました。

開発したいアプリケーションの種類によって適したプログラミング言語及びフレームワークがあることが理解できたのではないでしょうか。アプリケーション開発に携わる際には数多くあるプログラミング言語やフレームワークの全てを学びマスターすることは非現実的であるといえます。

開発するアプリケーションに必要な知識を効率よく習得し、アプリケーション開発に役立てていくことが大切です。

【モバイルアプリ開発に最適なフレームワーク4選】モバイルアプリ開発フレームワークのメリットやデメリットも徹底解説!

モバイルアプリ開発に活用することで、効率よくアプリ開発を進めることができると人気のフレームワーク。多くの有名アプリが、フレームワークの活用により製作されてきました。本記事では、モバイルアプリ開発に最適なフレームワークをはじめ、モバイルアプリ開発のフレームワークのメリット及びデメリット等を徹底解説致します。

モバイルアプリ開発のフレームワークとは

フレームワークは、ソフトウェア製品の開発の際、すぐに活用可能な基本的なプログラミングモジュール及びツール、ライブラリーを搭載したプラットフォームのことです。フレームワークを活用することにより、初心者でもプログラムを簡単に作成することが可能です。

モバイルアプリ開発のフレームワークとは、システム開発者がモバイルアプリ構築を行う際、補助を行う目的で製作されたライブラリのことです。モバイルアプリ開発に必要な基本的な構造が既に搭載されているため、効率よくモバイルアプリ開発を行うことが可能となります。

モバイルアプリ開発のフレームワークのメリット

モバイルアプリ開発のフレームワークを活用したアプリ開発には、次の4つのメリットがあります。

  • 効率的な開発が可能
  • 信頼性とセキュリティが高い
  • バグを回避
  • 保守が簡単にできる

本項目では、上記4つのメリットについて解説致します。

効率的な開発が可能

アプリケーションの基礎の部分にフレームワークを活用することで、基礎部分の開発を省略することが可能となり、効率の良いモバイルアプリ開発を行うことができます。

信頼性とセキュリティが高い

フレームワークでは、アプリケーションへのログイン機能等の仕組みが既に完成しているため、エンジニアが自作するよりも、高いセキュリティを保つことが可能です。

バグを回避

モバイルアプリ開発を行う場合、プロジェクトチームで作業を分担することが多いです。そのため、エンジニアによってコードの書き方が異なる場合があり、ヒューマンエラーが発生しやすくなってしまいます。フレームワークを活用すると、共通のコードでモバイルアプリ開発を行うことができ、バグを回避することが可能です。

保守が簡単にできる

フレームワークの規則に基づいてモバイルアプリ開発を行うため、アプリケーション全体の把握が容易となり、同時に保守性の向上も期待することが可能です。

モバイルアプリ開発のフレームワークのデメリット

モバイルアプリ開発のフレームワークを活用したアプリ開発には、次の2つのデメリットがあります。

  • フレームワークに関する学習が必須
  • プログラミング言語の理解が不十分になる可能性

本項目では、上記2つのデメリットについて解説致します。

フレームワークに関する学習が必須

実際に活用するフレームワークによって、フレームワークの使い方について学習する必要があります。活用したことのないフレームワークであれば、学習時間も長くなるでしょう。

プログラミング言語の理解が不十分になる可能性

フレームワークを活用すると、プログラミング言語の理解が不十分な初心者でも簡単にモバイルアプリ開発を行うことができてしまいます。そのため、フレームワークに頼りきってしまうと、プログラミング言語が十分に理解されないままという事象もあり得るのです。

モバイルアプリ開発に最適なフレームワークの選び方

必要な機能を搭載しているか

選択するフレームワークによって、様々な特徴があります。モバイルアプリ開発を行う際には、アプリケーションに搭載予定の機能をきちんと把握し、適切な機能が搭載されているフレームワークを選択することが大切です。

実績のあるフレームワークか

フレームワークは次から次へと新しいものが誕生しています。「メジャーだからいい」「新しいからだめ」といったことはありませんが、あまりにもマイナーなフレームワークを選択してしまうと、実際に対応可能なエンジニアが少なく、学習コスト等がかかってしまうでしょう。開発するモバイルアプリの機能によって、なるべく実績の高いフレームワークを選択することが、効率の良い開発への近道です。

将来性と自社能力との相性

フレームワークを選択する際は、フレームワークが将来的に廃れないものであることが大切です。人気のフレームワークは、提供開始から10年以上経過してもアップデートされ続けています。そのため、一過性の人気でフレームワークを選択するのではなく、長い目でみてメンテナンスやバージョンアップがされ続けるフレームワークを選択しましょう。その際、もちろん自社のエンジニアとの相性も鑑みる必要があります。

モバイルアプリ開発に最適なフレームワーク4選

本項目では、モバイルアプリ開発に最適なフレームワーク4選をご紹介致します。

React Native

React Nativeは、Facebookが発表した高い人気を誇るクロスプラットフォームのフレームワークです。React Nativeでは、iOS及びAndroid双方のプラットフォームに対応するJavaScriptのみを使用し、モバイルアプリ開発が可能です。

React Nativeで開発されたアプリの例

  • Facebook
  • Walmart
  • Instagram
  • UberEats など
React Native ホームページhttps://reactnative.dev

Flutter

Flutterは、Googleが製作した無料で使用できるオープンソースのフレームワークです。Flutterでは、携帯電話、TV、タブレット端末等のアプリ開発を行うことが可能です。

Flutterで開発されたアプリの例

  • Alibaba
  • Google広告 アプリ など
Flutter ホームページhttps://flutter.dev

lonic

lonicは、HTML及びCSS、JavaScript等の技術を活用し、クロスプラットフォームのモバイルアプリを開発するために最適なフレームワークです。lonicはモバイルアプリに組み込んでおきたい主要なコンポーネント(リスト、ナビゲーション、入力フォーム、タブ等)が搭載されています。

lonicで開発されたアプリの例

  • Diesel
  • McDonald’s Turkey app
  • Mclaren Automotive など
lonic ホームページhttps://ionicframework.com/jp/docs/

Xamarin

Xamarinは、Microsoftが発表したC#プログラミング言語を補助するフレームワークです。Xamarinは、1回のコード記述により、iOS及びAndroid、Windows用のアプリ開発を行うことが可能なので、コスト削減を見込むことが可能です。

  • BBC Good Food
  • HCL
  • アラスカ航空 など
Xamarin ホームページhttps://docs.microsoft.com/ja-jp/xamarin/get-started/what-is-xamarin

まとめ

モバイルアプリ開発に最適なフレームワークをはじめ、モバイルアプリ開発フレームワークのメリット及びデメリット等を徹底解説致しました。モバイルアプリ開発の都度、最適なフレームワークを選択することで、効率よくセキュリティ性の高いアプリを開発することが可能です。今回ご紹介した以外にもフレームワークは数多く存在していますので、開発するアプリ及び自社のスキルに適したものを選択し活用していきましょう。