-
VisualStudio導入
Visual Studio Professional 2015と同機能を持つ
個人専用のVisual Studio Community 2015を導入しました。
公式サイトからダウンロードし、画面の指示に従い、
カスタムで以下をインストールしました。Windows and Web Development - Microsoft SQL Server Data Tools Windows and Web Development - Microsoft Web Developer Tools Common Tools - Visual Studio Extensibility Tools Update 2
インストール後、アカウントのSign inを促されますが、
スキップしたまま起動できます。
初期状態だと英語表示なので一旦終了し、日本語パッチを適用します。日本語パッチ適用後、Visual Studio Community 2015を再度起動し、
「Tools」-「Options」-「Environment」-「International Setings」を選択し、
プルダウンから「日本語」を選択し、
再度、Visual Studio Community 2015を再起動します。補足ですが、Visual Studio Community 2015をインストールすると
2つの統合開発環境(IDE)がインストールされます。
Windowsの左下のメニューから確認できます。Blend for Visual Studio 2015 Visual Studio 2015
Blend for Visual Studio 2015はXAMLを使った開発でUIデザインを行うのに適したツールらしいです。
また、同じプロジェクトファイルを参照できるという親和性があるとか。
通常であれば、Visual Studio 2015で十分です。
Blend for Visual Studio 2015はデータベースエクスプローラーがなかったりで
しばらく困惑しました。
【Excel】アンスコ区切りをキャメルケースに変換する
Javaではクラス名はアッパーキャメルケース(パスカルケース)の形式にします。
メソッド名はローワーキャメルケースの形式にします。
アッパーキャメルケース:FirstExample
ローワーキャメルケース:firstExample
エクセルでA1に「FIRST_EXAMPLE」という文字列があると仮定し、
それをアッパーキャメルケース、ローワーキャメルケースに変換します。
' アッパーキャメルケース =SUBSTITUTE(PROPER(A1),"_","") ' ローワーキャメルケース =LOWER(LEFT(A1,1))&MID(SUBSTITUTE(PROPER(A1),"_",""),2,LEN(A1))
【Excel】フォルダ内のエクセルファイルのオブジェクトに対して検索を行う
Dir関数を用いるため、ネットワーク上の長いファイルパスには未対応です。
Sub Test() ' 画面チラつきを防止する。 Application.ScreenUpdating = False ' フォルダパスとファイル名を宣言する。 Dim strFilePath As String Dim strFileNmae As String ' テキストボックスかセル入力でフォルダを指定させる。 strFilePath = "C:\Users\test\Desktop\テストディレクトリ" ' 末尾が\ではない場合、\を追加する。(未実装) strFilePath = strFilePath & "\" ' 指定フォルダ内のファイル名を取得する。 strFileName = Dir(strFilePath, vbNormal) ' 結果シートを変数に設定する。 Dim resultBookSheet As Worksheet Set resultBookSheet = Worksheets("sheet1") ' 結果シートの行数を宣言する。 Dim longGyo As Long longGyo = 1 ' 指定フォルダ内のファイルがなくなるまで繰り返す。 Do While strFileName <> "" Dim result As Range Dim firstAddress As String ' ファイルを開く。 With Workbooks.Open(Filename:=strFilePath & strFileName) ' ファイル内のシート数を取得する。 Dim sheetCnt As Long sheetCnt = .Worksheets.Count ' 1シート目からnシート目まで繰り返す。 Dim i As Long For i = 1 To sheetCnt Dim shp As Shape ' シートからオブジェクトがなくなるまで繰り返す。 For Each shp In .Worksheets(i).Shapes ' オブジェクトにテキストを書き込める場合 ' shp.TextFrameはテキストが書き込めないオブジェクトでエラーが発生してしまう。 ' shp.TextFrame2はOffice 2007以降で利用可能だが、 ' テキストが書き込めないオブジェクトでもエラーが発生しない。 If shp.TextFrame2.HasText = True Then ' 検索文字列がオブジェクト内に存在する場合 If InStr(shp.TextFrame2.TextRange.Text, "Excute") > 0 Then resultBookSheet.Cells(longGyo, 1).Value = strFilePath & strFileName resultBookSheet.Cells(longGyo, 2).Value = .Worksheets(i).Name resultBookSheet.Cells(longGyo, 3).Value = "セル(" & shp.TopLeftCell.Address & ") - オブジェクト" resultBookSheet.Cells(longGyo, 4).Value = shp.TextFrame2.TextRange.Text longGyo = longGyo + 1 End If End If Next Next i ' 保存せずファイルを閉じる。 .Close SaveChanges:=False End With ' 次のファイルを取得する。 strFileName = Dir() Loop ' 画面チラつき防止を解除する。 Application.ScreenUpdating = True End Sub
【要件定義】アプリ計画
要件定義のアプリ計画のテンプレ。随時加筆。
-
アプリケーション要件 背景
現状のアプリはOracleとの依存関係が強すぎ、
メンテナンス効率が非常に悪いとう課題がある。
【要件定義】データ移行
要件定義のデータ移行のテンプレ。随時加筆。
- 目的
データ移行の概要を載せる。例
本書の目的は2017年1月サービス開始予定のXXXシステムにおける移行に関する 作業・役割・期間を定義し、プロジェクトメンバー、関連部署間において、 共有することを目的とする。
- 前提条件
判明している前提条件を載せる。例
・サービス開始は2017年1月4日(月)である。 ・移行作業については、2016年12月29日(木)のオンライン終了後~ 2017年1月3日(火)までの間でシステムを停止させた状態で行う。 ・XXXシステムの切替は一括切替とし、一部切替は行わない。 ・XXXシステムの切り戻しは一括切り戻しとし、一部切り戻しは行わない。 ・セキュリティパッチの適用は2016年8月31日をもって凍結する。以降、 ・本番開始までのタスク・スケジュールは今後随時見直し行う。 ・移行の大まかな流れは以下の通りとする。 (ここで年、月のエクセル図があるとイメージがつきやすい)
- システム移行
IPやURLや製品情報を載せる。例
新システムのシステム構成
No 役割 分類 IPや製品名 1 WEBサーバ#1 Linux系サーバ XXXX 2 WEBサーバ#2 Linux系サーバ XXXX 3 APサーバ#1 Linux系サーバ XXXX 4 APサーバ#2 Linux系サーバ XXXX 5 DBサーバ Linux系サーバ XXXX 6 ロードバランサ#1 仮想アプライアンス XXXX 7 ロードバランサ#2 仮想アプライアンス XXXX 8 帳票サーバ Windows系サーバ XXXX アプリケーションの機能ごとに言語やバージョンの違いを載せる。
ライブラリの違いもあるとより良い。例
1.オンラインアプリケーション 2.クライアントアプリケーション 3.バッチアプリケーション
No 種別 名称 言語 Oracle C# Java Pro*C SQLローダ PLSQL 1 オンライン XXXマスタ登録 ● ● 2 クライアント XXXマスタ登録 ● ● 3 バッチ XXXマスタ取込 ● - データ移行
移行対象有無や移行方法を載せる。例
No 名称 移行有無 移行方法 スキーマ 表領域 1 テーブル ● SQL文 XXXX TBL 2 インデックス ● SQL文 XXXX IDX 3 プロシージャ - - - - 4 パッケージ - - - - 5 シーケンス ● SQL文 XXXX TBL 6 トリガー - - - - 7 シノニム - - - - オブジェクト構成があまり変わらない場合、新旧の比較を載せるのも良い。
例
No 旧オブジェクト名 新オブジェクト名 区分 概要 新規 変更 削除 1 Aテーブル Aテーブル ● カラム追加 2 Bテーブル ● テーブル追加 3 Cテーブル ● テーブル削除 テーブルのうち、データマッピング、初期データについて載せる。
詳細は外部設計にすることが多い。例
1.テーブルデータ
No 旧カラム名 新カラム名 区分 概要 新規 変更 削除 1 ID ID 変更なし 2 氏名漢字 ● カラム追加 3 氏名カナ ● カラム削除 No テーブル名 カラム名 設定値 1 URLマスタ ID 111 2 URLマスタ URL z-area.net - 業務移行
アプリケーションの機能ごとに稼働時間の違いや運用ルールの違いを載せる。例
1.オンラインアプリケーション 2.クライアントアプリケーション 3.バッチアプリケーション
No 種別 機能名 旧機能概要 新機能概要 1 オンライン XXXマスタ登録 300件まで登録 2000件まで登録 2 クライアント XXXマスタ登録 300件まで登録 2000件まで登録 3 バッチ XXXマスタ取込 2000件まで登録 5000件まで登録 - 依頼事項
事前に判明している依頼先と依頼内容があれば載せる。 - 移行リハーサル
移行リハーサルの概要を載せる。例
移行リハーサルについては3回実施する。 <1回目> データベースの移行検証 データベース以外の移行検証 <2回目> 1回目の検証結果を受けた見直し実施 <3回目> 最終的な手順確認
移行時に発生する作業 1.システム移行(システム構築) 2.リリース 3.現行サーバの停止 4.データ移行(DB、ファイル) 5.検証
移行リハスケジュール (ここで年、月のエクセル図があるとイメージがつきやすい)
- 移行テスト
移行後の環境で行うテスト方針を載せる。 - 移行体制
移行時の体制や連絡先を載せる。
(ここで年、月のエクセル図があるとイメージがつきやすい) - 本番検証
移行の検証手段と移行判定方針を載せる。2017年1月1日(日)に運用にてURLを切り替えていただき、アプリチームにて
アプリケーション観点で動作確認を行う。
他システムとの連携確認は実施しない。
2017年1月2日(月)に顧客に動作確認を実施いただく。 - 切り戻し
本番検証で失敗した場合の切り戻し方針を載せる。本番検証で現行業務に支障を及ぼすと判断される場合、切り戻しを実施する。
切り戻しについては以下表のシステムを切り戻す。 - コンティンジェンシープラン
移行時の不測の事態が発生することを想定し、
その対策や行動手順として、再実行時の必要日数や候補日を載せる。現時点では移行期間は4日間必要と考える。
再移行期間の候補は以下の通り。
1.2017年1月7日(土)~2017年1月9日(月・祝)と前後1日
2.2017年3月18日(土)~2017年3月20日(月・祝)と前後1日
【Excel】CSVファイルを開く
-
ダブルクリック
ダブルクリックで開いた場合、数値などは自動判断する。 -
テキストファイルで読み取り
ツールバーの「データ」-「外部データの取り込み」-「テキストファイル」から読み取り、
区切り文字をカンマに指定し、全項目を文字列として読み取る。
数値も文字列として読み取るので、先頭が0でも変換しない。
項目間が”,”の場合、ダブルクォート内のカンマは区切り文字ではなく、
文字としてのカンマとして扱う。
【管理】WBS
WBSをエクセルで書くことが多いので、数式や書き方を記載。
-
祝日の設定
祝日は別紙「リスト」シートを作成し、A:Aに日付書式で管理する。 -
終了日の自動設定(祝日除く)
作業日数と開始日を入力すると祝日を除いた上で終了日を自動設定できるよう
終了日に数式を設定する。' 終了日の自動設定 =IF(開始日セル="","",WORKDAY(開始日セル,ROUNDUP(作業日数セル,0)-1,リスト!祝日設定範囲))
-
1ヶ月の日付の設定
X月1日のセルに対して、YYYY/MM/DD形式でセルに入力し、
書式をユーザ定義で「d」を設定する。
X月2日のセルに対して、「X月1日のセル+1」を入力し、書式をユーザ定義で「d」を設定する。
以降、繰り返しとなる。 -
1ヶ月の曜日の自動設定
曜日を入力したいセルに対して、数式を設定する。' 曜日の自動設定 ' aaa:「月」、「火」などの曜日1文字を表す ' aaaa:「月曜日」、「火曜日」などの曜日3文字を表す。 =TEXT(X月1日のセル,"aaa")
-
日ごとの書式設定
祝日は灰色、タスクの作業期間中はオレンジ色で塗りつぶせるよう
タスク行の日ごとのセルに数式を設定し、
さらに条件付き書式を設定する。
オレンジ色の条件付き書式4の優先順位を下げ、
灰色の条件付き書式1~3の優先順位を上げ、
「条件を満たす場合は停止」チェックをONにするところがミソ。' タスク行の日ごとのセル ' 作業日が開始日と終了日の間(=作業期間中)の場合、1を設定している。 =IF(OR(作業日数セル="",作業日数セル=0),"",IF(AND(作業日セル>=開始日セル,作業日セル<=終了日セル),1,""))
' 条件付き書式1 ' 作業日が別紙「リスト」シートに設定した祝日範囲に含まれる場合、 ' COUNTIFで1が返るため、条件がTUREとなる。 ' この時、セルの塗りつぶしの色、フォント色を灰色にする。 ' 「条件を満たす場合は停止」チェックをONにする。 =COUNTIF(リスト!祝日設定範囲,作業日セル)=1
' 条件付き書式2 ' 作業日が土曜日の場合、WEEKDAYで7が返るため、条件がTUREとなる。 ' この時、セルの塗りつぶしの色、フォント色を灰色にする。 ' 「条件を満たす場合は停止」チェックをONにする。 =WEEKDAY(作業日セル)=7
' 条件付き書式3 ' 作業日が日曜日の場合、WEEKDAYで1が返るため、条件がTUREとなる。 ' この時、セルの塗りつぶしの色、フォント色を灰色にする。 ' 「条件を満たす場合は停止」チェックをONにする。 =WEEKDAY(作業日セル)=1
' 条件付き書式4 ' 指定の値を含むセルだけを書式設定で ' 「セルの値」「次の値に等しい」「=1」を設定する。 ' この時、セルの塗りつぶしの色、フォント色をオレンジ色にする。
【Redmine】Railsアプリケーションを実行するためのApacheモジュール導入
Redmine等のRuby on Railsアプリケーションを
実行するためのApacheモジュールを導入します。
導入することのメリットは以下の通りです。
-
Apache単独でRailsアプリケーションを実行可能。
Apacheのモジュールとして実装されており、
別途デーモンを起動する必要がなく、TCPポートも使わない。 -
Railsアプリケーションのデプロイが簡単になる。
ファイルをアップロードするだけなので、PHPのような感覚。 -
サーバのメモリを節約できる。
Railsインスタンスは必要なタイミングで生成し、
一定時間アクセスがなければインスタンスを終了させる。
-
Passenger導入
gem install passenger --no-rdoc --no-ri passenger-install-apache2-module
以下の警告は無視しました。
/usr/include/features.h:330:4: warning: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Wcpp] # warning _FORTIFY_SOURCE requires compiling with optimization (-O)
以下の設定依頼が表示されるので、メモしておきます。
Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27 PassengerDefaultRuby /usr/bin/ruby2.0 </IfModule> After you restart Apache, you are ready to deploy any number of web applications on Apache, with a minimum amount of configuration!
ここで別のTeraTermを立ち上げ、
Apache2の設定ファイルを作成し、メモしたものを書き込みます。vi /etc/httpd/conf.d/redmine.conf
# Passengerの基本設定。 LoadModule passenger_module /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /usr/local/share/ruby/gems/2.0/gems/passenger-5.0.27 PassengerDefaultRuby /usr/bin/ruby2.0 </IfModule> # サブディレクトリでRedmineを実行するための設定 RackBaseURI /redmine # Passengerが追加するHTTPヘッダを削除するための設定(任意) Header always unset "X-Powered-By" Header always unset "X-Rack-Cache" Header always unset "X-Content-Digest" Header always unset "X-Runtime" # Passengerのチューニングのための設定(任意) PassengerMaxPoolSize 20 PassengerMaxInstancesPerApp 4 PassengerPoolIdleTime 3600 PassengerHighPerformance on PassengerStatThrottleRate 10 PassengerSpawnMethod smart RailsAppSpawnerIdleTime 86400 PassengerMaxPreloaderIdleTime 0 # RedmineのCSSや画像へのアクセスを許可 <Directory "/var/lib/redmine/public"> Require all granted </Directory>
保存後、Apache2を再起動し、元のTeraTermでエンターを押下します。
/etc/rc.d/init.d/httpd restart
Apache上のPassengerでRedmineを実行するため、
Redmineのオーナーを変更します。
今回、AWSではApacheはrootユーザで実行しているため、
変更前のオーナーでも実行は可能です。chown -R apache:apache /var/lib/redmine
Apacheのドキュメントルートに指定されているディレクトリに
Redmineのpublicディレクトリに対するシンボリックリンクを作成します。ln -s /var/lib/redmine/public /var/www/html/redmine
再度、Apache2を再起動します。
これにより、全てのRailsアプリケーションも再起動されるようになります。/etc/rc.d/init.d/httpd restart
-
Redmine動作確認
以下のURLでRedmineにアクセスできれば成功です。
https://xxx.xxx.xxx.xxx/redmine/コマンド以外のRedmineの初期設定については、
以下のURLを確認しながら画面上で行います。
http://redmine.jp/tech_note/first-step/admin/
【Redmine】Redmine導入
-
Redmine導入
Redmineのバージョンは以下のURLから最新版を調査します。
http://www.redmine.org/projects/redmine/wiki/Downloadcd /var/lib curl -O http://www.redmine.org/releases/redmine-3.2.1.tar.gz tar xvf redmine-3.2.1.tar.gz mv redmine-3.2.1 /var/lib/redmine
-
RedmineからMySQLへの接続ファイル作成
vi /var/lib/redmine/config/database.yml
production: adapter: mysql2 database: レッドマイン用DB名 host: localhost username: レッドマイン用ユーザ名 password: "レッドマイン用ユーザパスワード" encoding: utf8
スペースは2つ空けること。
パスワードはダブルクォートをつけること。
この設定がおかしいと後続のbundle処理でハマリます。
「/var/lib/redmine/config/database.yml.example」にサンプルファイルがあります。
-
Redmineからメールサーバへの接続ファイル作成
vi /var/lib/redmine/config/configuration.yml
今回はお試しで導入することもあり、作成しませんでした。
日本語フォントファイルのパス、アップロードされたファイルの保管場所、
データベースの暗号化等も設定できます。
この設定ファイルも記述をミスると後続のbundle処理でハマリます。
「/var/lib/redmine/config/configuration.yml.example」にサンプルファイルがあります。
-
gemパッケージ導入
Rubyのパッケージ管理ツール「bundler」を使用して、
Redmineが依存するgemパッケージを導入します。cd /var/lib/redmine bundle install --without development test
通常はここで普通に上手くいくようですが、私の環境では以下のエラーが発生しました。
[root@ip-xxx-xxx-xxx-xxx redmine]# bundle install --without development test /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- io/console (LoadError) from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell/basic.rb:2:in `<top (required)>' from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell/color.rb:1:in `<top (required)>' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/vendor/thor/lib/thor/shell.rb:17:in `shell' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/ui/shell.rb:14:in `initialize' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:12:in `new' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:12:in `rescue in start' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/cli.rb:10:in `start' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/exe/bundle:19:in `block in <top (required)>' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/lib/bundler/friendly_errors.rb:7:in `with_friendly_errors' from /usr/local/share/ruby/gems/2.0/gems/bundler-1.11.2/exe/bundle:17:in `<top (required)>' from /usr/local/bin/bundle:23:in `load' from /usr/local/bin/bundle:23:in `<main>'
「io/console (LoadError)」が存在しないと記載があるので、
以下のコマンドで追加で導入しました。cd /var/lib/redmine gem install io-console
その後、「/var/lib/redmine」を全部削除し、最初からやり直したところ、上手くいきました。
-
Redmineのセッション改ざん防止用秘密鍵の作成
cd /var/lib/redmine rake generate_secret_token
-
Redmine用DBにテーブル作成
cd /var/lib/redmine RAILS_ENV=production rake db:migrate
-
Redmine用DBのテーブルに初期データ登録
初期データ登録はコマンドではなく、Redmine起動後に管理画面から実行することも可能。cd /var/lib/redmine RAILS_ENV=production rake redmine:load_default_data
-
Redmineのパーミッション設定
cd /var/lib/redmine chown -R 755 files log tmp public/plugin_assets
【Redmine】Redmine導入前準備
RedmineをAWSのEC2の無料版であるAmazon Linuxに導入します。
導入の前提として、WEBサーバ、DBサーバの設定が済んでいること。
WEBサーバにはApache2、DBサーバにはMySQLを利用します。
導入前の準備として、各ツールを揃えます。
-
開発ツール・ビルドに必要なヘッダファイルのインストール
RubyやPassengerのビルドで必要なヘッダファイルです。yum -y groupinstall "Development Tools" yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
-
ImageMagickと日本語フォントのインストール
ImageMagickと日本語フォントはガントチャートをPNG形式の画像にエクスポートする機能、
添付ファイルのサムネイル画像を作成するのに利用するようです。
インストールを行わなくてもRedmineの実行は可能ですが、入れておきます。yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
-
Rubyインストール
Amazon Linuxでは既に導入済ですが、最新のものにしました。yum install ruby-devel
-
bundler導入
Redmineが使用するGemを一括インストールするためのツールです。gem install bundler --no-rdoc --no-ri
「–no-rdoc –no-ri」はドキュメントのインストールを省略するためのオプションです。
-
Redmine用のMySQLのユーザ作成
mysql -uroot -pデータベースパスワード
create database レッドマイン用DB名 default character set utf8; grant all on レッドマイン用DB名.* to レッドマイン用ユーザ名@localhost identified by 'レッドマイン用ユーザパスワード'; flush privileges; exit