院内SEのソースコード管理手法とは?

医療情報システムGit, SVN, VSS

病院内では主に電子カルテやその他の医療システムが利用されていますが、病院によっては足りない部分を補うものや、電子カルテ普及前に使っていたシステムを独自に作っている場合があります。 私の病院でも独自のアプリを作っていて、一部の業務で利用しています。

そういったプログラムですが、プログラムのソースコードをそのまま保存しているとバグがあった場合に戻すのが難しかったり、変更した点を見直すのが困難な場合があります。 今回はそういったプログラムのソースコードを管理するツールをいくつか使ったことのあるものでまとめてみました。

バージョン管理とは

バージョン管理システムはソースコード管理とも呼ばれ、昨今のソフトウェア開発ではほぼ必須で取り入れられているかと思います。学生の時のプログラム開発は主に一人でやっていたのでそういったツールを使ったのは社会人になってからですが、どこの現場でも使っていました。

バージョン管理システムを導入することによって、主に以下のようなメリットが挙げられます。

  1. 以前のバージョンへ容易に復元できる
    バージョン管理システムはソースコードをサーバーなどに記録するたびにその時の内容が一つの区切りとして保存されていきます。そのため、任意の区切り(バージョン)に戻すことができ、バグがあった場合も容易に戻して修正前のプログラムにすることができます。
  2. 変更内容を記録できる
    バージョンごとにどのファイルのどこを変更したのかが分かるので、別の人にソースコードをレビューして貰うこともでき、後から問題があった場合の調査もしやすいので、バグなどの迅速な対応も可能です。
  3. デグレの発生をを防止できる
    プログラムの修正を行なっているとデグレ(デグレッション=後戻り、後退など)と呼ばれる、修正箇所とは別の個所でプログラムの動きに不具合を起こしてしまう場合があります。チーム開発では自分だけがプログラムを書いているわけではないので、別の人が書いたプログラムの修正箇所も確認しながら開発することで、プログラム全体の動きを確認する必要があります。

バージョン管理システムをいくつか種類がありますが、私が使ったことのあるツールを紹介したいと思います。

VSS

VSSはVisual SourceSafeと呼ばれるもので、Microsoftが開発したバージョン管理システムです。Microsoftの開発ツールVisual Studioのファミリーとして存在し、Visual C++やVisual Basicなどで主に使われています。

私の病院でもVisual Basicでの開発が主だったので、こちらを使うことが多かったです。

VSSではプログラムを修正する際にチェックアウトと呼ばれる作業が必要です。チェックアウトによりプログラムを自分の作業環境に一度保管します。この間他のユーザーはそのプログラムを修正することができなくなります。プログラムを修正し終わったらプログラムをチェックインして修正をサーバー上に反映させます。

基本的にシンプルな仕組みで動いているので、ソースコードの管理をあまり考えずに開発できるのがメリットだと思われます。しかし、同じソースコードを修正したい場合に他の人がチェックアウトしていると修正できなくなってしまうのが難点です。

VSSは基本的にWindowsでしか動かず、しかも有償システムなので今から新規で入れるのは厳しいかも知れませんが、すでに使っているプロジェクトであれば安定して使えていたので別のシステムに乗り換える必要もないかなと思います。

SVN

SVNはSubVersionと呼ばれるバージョン管理システムで、私の経験ではこちらのを採用している会社やプロジェクトが多かったです。

VSSと同じような考え方のバージョン管理システムCVS(Concurrent Versions System)というものを更に使いやすく改良した感じです。ファイル単位でのバージョン管理をプロジェクト単位で管理するようにできたり、ファイル・フォルダの名前変更や削除など普通のエクスプローラーのような動作ができるようなっています。

また、サーバーの場所もローカル内だけではなくネットワーク上に置くことができて自由度も高くなっています。

チェックアウトして他の人がプログラムを修正できないように制限することもできるのですが、修正できるような設定も可能です。その場合はお互いが修正したプログラムを見比べて必要な箇所のみを取り入れる作業(マージ)が発生します。

Git

Gitは今まで紹介してきたバージョン管理システムとは違った方針を持っていて、 VSSやSVNは集中型ですが、Gitは分散型と呼ばれる管理システムを採用しています。考え方は難しいのですが、サーバーだけがバージョンを管理せずに各個人でもバージョンが管理できるような考え方です。

イケイケのIT企業などの大規模な開発で使われることも多いですし、小規模な個人開発でも使われるケースが多く今のバージョン管理システムのシェアはGitが一番かと思われます。

私も会社外のグループ開発でGitを採用したことがあるのですが、学習コストが高くて難しいと感じました。(コマンドだけで管理することも可能なのでカッコいいと感じる面もありました😅)

会社内で使ったことはないのですが、導入する場合でも前述した通り学習コストが高いと感じるのですでにSVNなどを導入しているのであれば、無理して使う必要はないのかなと思います。 ただ、使い方を知っていればGitHubなどインターネット上で公開しているプログラムを利用できたり、個人開発でも開発しやすくなったりするので勉強しておくのはいいと思います。

利用例

私の病院では、VBの開発では VSSを使っており、.netの開発ではSVNを使っていました。開発言語によってツールを使い分ける必要があるのですが、基本的な使い方は似ているのでそれほど困りませんでした。

また、それぞれのツールはソフトウェアを導入することによってエクスプローラー上で視覚的に操作できるので、それを使って開発業務をしていました。

会社やプロジェクトによって運用の仕方が異なるので、その場その場で使い方をWikiなどに明記してチーム開発を円滑に進められる仕組みが必要だと思います。

まとめ

会社では学生時代とは異なりチーム開発が主となるので、こういったバージョン管理システムが必須となってきます。私は学生時代はこういったツールの存在を知らずに社会人になってから使い始めましたが、もし使ったことがないのであれば使ってみても良いかと思います。