【Eclipse】classpathに書き込めませんでしたというエラーの原因

新規でプロジェクトを作成せず、
インポートしたプロジェクトに対して、外部JARファイルを追加した場合、
以下のようなエラーが出ることがあります。

ビルド・パスの設定(.classpathに書き込めませんでした)

原因は「.classpath」ファイルが隠しファイルになっているから。
「.classpath」ファイルを右クリックし、隠しファイルのチェックを外せば
エラーが解消します。

【Eclipse】動的Webプロジェクトのコピー

Eclipseで動的Webプロジェクトをコピーしたい場合、以下を行う。

  • プロジェクト名のリファクタリング
    プロジェクトで右クリックし、リファクタリングを選択する。
    変更後のプロジェクトを入力する。
  • プロジェクトのコンテキスト名変更
    プロジェクトで右クリックし、「プロパティ」を選択する。
    Webプロジェクトの設定を選択し、コンテキスト・ルートを
    コピー後のプロジェクトに合わせて変更する。
  • ローカルのTomcat設定変更
    以下ファイルの「Context docBase」のプロジェクト名を変更する。

    /workspace/Servers/ローカル・ホスト の Tomcat v7.0 サーバー-config/server.xml
    

【VisualStudio】SQLServerCompact4.0導入

ローカルDBと呼ばれるSQLServerCompact4.0を使えるようにします。
SQLServerCompact4.0はVisual Studio 2013でサポートを打ち切ったようですが、
ツールを導入すれば利用できるようになります。

「ツール」-「拡張機能と更新プログラム」を選択し、
「オンライン」を選択し、右側の検索テキストボックスで
「SQL Server Compact / SQLite Toolbox」を入力し、検索する。

検索結果でHITした「SQL Server Compact / SQLite Toolbox」を選択し、
「ダウンロード」ボタンを押下する。

インストール後、Visual Studio 2015を再起動し、
サーバーエクスプローラーを開く。
サーバーエクスプローラーのミニツールバーの右側に追加された
「SQL Server Compact / SQLite Toolbox」のアイコンをクリックする。

「Data Connections」を選択し、右クリックし、
「Add SQL Server Compact 4.0 Connection」を選択する。
Filenameで任意のDB名を入力し、Passwordに任意のパスワードを入力し、
「Create」ボタンを押下する。
「Test Connection」ボタンを押下し、接続確認できれば問題なし。

作成したDB名.sdfを選択し、右クリックし、
「Build Table」選択し、テーブルを作成する。

このようにサーバーエクスプローラーと同じ感覚で
SQL Server Compactに対して操作が可能となる。

【VisualStudio】VisualStudio導入

  • 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や製品名
    1WEBサーバ#1Linux系サーバXXXX
    2WEBサーバ#2Linux系サーバXXXX
    3APサーバ#1Linux系サーバXXXX
    4APサーバ#2Linux系サーバXXXX
    5DBサーバLinux系サーバXXXX
    6ロードバランサ#1仮想アプライアンスXXXX
    7ロードバランサ#2仮想アプライアンスXXXX
    8帳票サーバWindows系サーバXXXX
    ※仮想アプライアンスとは仮想マシン内にOS、ミドルウェア、アプリケーションといった  全ソフトウェア・コンポーネントを予め準備し、デプロイすると稼働状態となり、  利用可能になる。

    アプリケーションの機能ごとに言語やバージョンの違いを載せる。
    ライブラリの違いもあるとより良い。

    1.オンラインアプリケーション
    2.クライアントアプリケーション
    3.バッチアプリケーション
    
    
    No種別名称言語
    OracleC#Java
    Pro*CSQLローダPLSQL
    1オンラインXXXマスタ登録
    2クライアントXXXマスタ登録
    3バッチXXXマスタ取込
  • データ移行
    移行対象有無や移行方法を載せる。

    No名称移行有無移行方法スキーマ表領域
    1テーブルSQL文XXXXTBL
    2インデックスSQL文XXXXIDX
    3プロシージャ----
    4パッケージ----
    5シーケンスSQL文XXXXTBL
    6トリガー----
    7シノニム----

    オブジェクト構成があまり変わらない場合、新旧の比較を載せるのも良い。

    No旧オブジェクト名新オブジェクト名区分概要
    新規変更削除
    1AテーブルAテーブルカラム追加
    2Bテーブルテーブル追加
    3Cテーブルテーブル削除

    テーブルのうち、データマッピング、初期データについて載せる。
    詳細は外部設計にすることが多い。

    1.テーブルデータ
    
    
    No旧カラム名新カラム名区分概要
    新規変更削除
    1IDID変更なし
    2氏名漢字カラム追加
    3氏名カナカラム削除
    2.初期データ
    Noテーブル名カラム名設定値
    1URLマスタID111
    2URLマスタURLz-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」を設定する。
    ' この時、セルの塗りつぶしの色、フォント色をオレンジ色にする。