クリップボード履歴

クリップボード履歴

最近のWindows10(October 2018 Update以降)では標準機能としてクリップボード履歴「Win+V」なのですが、例のごとく現場PCは「Windows10」じゃない。だったり、Windows10だけど、まだ利用できないバージョンだなど。

勝手にツールなども入れられないので、Windows10標準で稼働するスクリプトを作成して代用することにしました。

使い方

以下のソースコードテキストエディタに張り付けて「クリップボード履歴.hta」として保存。 htaファイルをダブルクリックして起動すれば、クリップボードの履歴が蓄積されていきます。

このPCでは利用できませんエラーになる場合
方法①

クリップボード履歴起動」ショートカットを作成する。

  1. mshta.exe ショートカットを作成し、名前を「クリップボード履歴起動」にする。
    ※mshta.exe フルパス例。"C:\Windows\System32\mshta.exe"
  2. 「 mshta.exe」ショートカットのリンク先に「クリップボード履歴.hta」パスを引数でいれる。
    例)C:\Windows\System32\mshta.exe "C:XXXXX\XXXXX\クリップボード履歴.hta"

ソースコード

<html>
<head><title>クリップボード履歴  【利用法:選択してEnter or ダブルクリック】  </title></head>
<!--
Ver 1.0:2020/12/28:新規作成
Ver 1.1:2020/12/28:起動時にSelectにフォーカスを当てる
Ver 1.2:2020/12/29:Selectは複数選択できないように変更 multiple → size="300"
Ver 1.3:2020/12/29:初回起動で履歴がない場合にSelect[0]がエラーとなるためTryCatch化
-->

<script>
    w = screen.width/3;
    h = screen.height/2;
    window.resizeTo(w, h);
    //画面中央に表示
    window.moveTo((screen.width - w) / 2 , (screen.height - h) / 2 );
</script>


<head>
    <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <title>ClipHistory</title>
    <hta:application
        scroll="no"
        border="thin"
        innerboder="no"
        scrollflat="yes"
        CONTEXTMENU="no"
    >
</head>


<style type="text/css">
    select {
        width: 100%;
        height: 70%;
        display:inline;
    }
    textarea {
        width: 100%;
        height: 30%;
        display:inline;
    }
</style>


<body>
<!--
  <form name="myform">
    <input name="myfile" type="file" />
  </form>
-->

    <form name="fm" onkeydown="keydown_enter()">
        <!--<label><font size="2"> 履歴</font></label>-->
        <select type="submit" name="sct" size="300" 
             onChange="DisplayTextArea(this)" onDblClick="copy(this)" >
        </select>
        <textarea id="ta" cols=100 rows=10></textarea>
        <input type="hidden" id="mybutton" value="取り出し" onclick=copy()></input>
    </form>

</body>


<script type="text/javascript">
<!--
    var sfo = new ActiveXObject("scripting.filesystemobject");
    var cd = sfo.buildpath(sfo.getparentfoldername(location.pathname), "クリップボード履歴ファイル");
        if (sfo.folderexists(cd) == 0) {sfo.createfolder(cd);}
    sfo = null;
    //rec_text:前回クリップボード内容を保持
    var rec_txt = "";
    var set_rec = setInterval(rec, 500);
    var hisFileNullFlg = false;
    beforeOpen();


//クリップボードから情報取得
function rec() {
    try {
        //window.clipboardData.getData("text")でクリップボードから取得可能(IE ※HTA含むのみ)
        var cb_txt = window.clipboardData.getData("text");
        if (hisFileNullFlg == false) {
            //直前コピー内容 != 今回コピー内容 AND 今回コピー内容  != null & 今回コピー内容 != SELECT[0]
            if (rec_txt != cb_txt && cb_txt != null && cb_txt != fm.sct[0].value) {
                //Selectへの登録
                setSelect(cb_txt);
            }
        } else {
            if (rec_txt != cb_txt && cb_txt != null  ) {
                //Selectへの登録
                setSelect(cb_txt);
            }
        }
    } catch(e) {
        //alert("クリップボード保存時にエラーが起きました。バグった場合は一度終了して再起動してください");
    }
}

//Selectへの登録
function setSelect(cpWord){
    //履歴表示(Select)用に改行コードは置換
    var tmp = cpWord.replace(/\r\n|\r|\n/g, " ");
    //Selectへ追加
    var ele = document.createElement("option");
        ele.text = tmp.replace(/^\s+|\s+$/g, "").substr(0, 100);
        ele.value = cpWord;
    //option add 位置をしてい「0」が一番最初
    if (navigator.userAgent.match(/Gecko/)) {
        fm.sct.insertBefore(ele, fm.sct.options[insert]);
    }
    else {
        fm.sct.add(ele, 0);
        //Select 一番上だけ選択
        fm.sct.selectedIndex = -1;
        fm.sct[0].selected = true;
    }
    rec_txt = cpWord;
    
    //テキストボックスへ表示
    fm.ta.value = cpWord;
    //セレクトにフォーカス
    document.fm.sct.focus();
}


//クリップボードへ貼り付け
function copy() {
    clearInterval(set_rec);
    var cs = fm.sct.options;
    var str = "";
    //Select複数の場合に連結する
    for (var cc = 0; cc < cs.length; cc ++) {
        if (cs[cc].selected) {
            //str += rec_txt = cs[cc].value + "\r\n";
            str += rec_txt = cs[cc].value;
        }
    }
    window.clipboardData.setData("text", str);
    //Selectへ登録(Selectの一番上と異なる場合のみ)
    if( str != fm.sct[0].value) { setSelect(str); }
    rec_txt = str;
    set_rec = setInterval(rec, 500);
    //alert( sct.value );
    minWindow();
}

//テキストボックスにクリップボード内容を表示
function DisplayTextArea(){
    //alert( "TEST" );
    fm.ta.value = fm.sct.value;
}

function keydown_enter() {
  //Enterキー押下
  if(window.event.keyCode == 13) {
    document.getElementById("mybutton").click();
    minWindow();
  }
  //ESCキー押下
  if(window.event.keyCode == 27) {
    minWindow();
   }
}

function minWindow(){
    //画面を最小化する
    WsShell = new ActiveXObject("WScript.Shell")
    WsShell.SendKeys("% n")
}

function startNotepad(){
    var shell = new ActiveXObject("WScript.Shell");
    shell.Run("C:\\Windows\\System32\\notepad.exe", 1, true);
}

function beforeClose(){
    var sfo = new ActiveXObject("scripting.filesystemobject");
        filename = sfo.buildpath(cd, "クリップボード履歴" + ".txt");
    var ocf = sfo.createtextfile(filename, 2);
    
    var cs = fm.sct.options;
    var str = "";
    //selectの内容を連結
    for (var cc = 0; cc < cs.length; cc ++) {
        str += rec_txt = cs[cc].value + "★クリップボード履歴★\r\n";
    }
    ocf.write(str);
    ocf.close();
    sfo = null;
}

//クローズ時の処理
function window.onbeforeunload(){
    beforeClose();
    //if( event.clientY < 0 || event.altKey ) { event.returnValue = "終了してよろしいですか?" ; }
}

function beforeOpen(){
    //alert("beforeOpen");

    var sfo = new ActiveXObject("scripting.filesystemobject");
    filename = sfo.buildpath(cd, "クリップボード履歴" + ".txt");
    
    if (sfo.FileExists(filename)) {
        if (sfo.getFile(filename).size != 0 ) {
            var stream = sfo.OpenTextFile(filename, 1);
            var text = stream.ReadAll().split("★クリップボード履歴★\r\n");
            stream.Close();
            //alert(text.length);
            var i= 0;
            //初期読み込み時は300個まで。その後の履歴保存時に結果として300個になる。
            while(i<text.length && i<300){
                //Selectへ追加
                var ele = document.createElement("option");
                var line = text[i];
                ele.text = line.replace(/★クリップボード履歴★|^\s+|\s+$|\r\n|\r|\n/g,"").substr(0, 100);
                ele.value =  line.replace("★クリップボード履歴★","");
                //空文字以外を初期登録
                if(ele.value != "") {
                    fm.sct.add(ele);
                }
                i++;
            }
            //alert(hisFileNullFlg);
        } else {
            hisFileNullFlg = true;
            //alert(hisFileNullFlg);
        }
    } else {
        hisFileNullFlg = true;
    }
    sfo = null;
    //一番上のSelect選択(Ver 1.1)
    try{
            fm.sct.focus();
            fm.sct[0].selected = true;
    }catch(e){
        }
}
-->
</script>
</html>

クリティカルパスの算出について

作ろうと思ったきっかけ

以前、excelで作った自作のWBSにおけるデメリットの1つとして挙げた、クリティカルパスを把握できない(しにくい)だったり、スケジュール変更のたびに後続タスクの日付を手動で修正したり…という話。

今時点では使うことはないので放置していましたが、やっぱり勉強もかねて機能搭載することに。ほかのプロジェクトに行ったときのための準備も兼ねて。

 

クリティカルパス算出の方法

ES、EF、LS、LFについて

ES(EarlyStart:最早開始日)

EL(EarlyFinish:最早終了日)※ESに所要日数を足すだけ(当日含む)

LS(LateStart:最遅開始日)

LF(LateFinish:最遅終了日)※LSに所要日数を足すだけ(当日含む)

先行関係が存在するタスク間における「最初から最後までつづく唯一の一本道」。この道の中で1日でも遅延すると最後のタスクも遅延する。詳しい説明は他の方にお任せするとして、算出方法は以下の通り。

f:id:kokke33:20200713222602p:plain

クリティカルパス算出

上記イメージのexcelも置いておきます。

github.com

WBSへの機能搭載

 計算方法はなんとなくわかった。VBA化したときの大まかな流れは以下の通りでしょうか。

  1. プロジェクトの開始日を起点に全タスクのESを算出
  2. ESからEFを算出(これは簡単)
  3. EFの最大値を見つける
  4. EFの最大値を起点に、今度はESとは逆向きにLSを算出
  5. LSからLFを算出(これは簡単)
  6. EFとLFが同じ日付のタスクがクリティカルパス

うーむ、簡単そうだけど結構難しいかも。

EF算出やLS算出は再帰関数化しないといけさそう。先行関係タスク登録ミスのせいで簡単に無限ループしちゃうかもしれない。そこら辺のチェックの仕組みなど考えなくちゃ。。

 

次回に続く…

excelを別インスタンスで起動する

背景

excelを複数起動していると「お互いに干渉する」ことが多々ある。例えば「数式大量」ブックに影響されて他のブックを編集するたびに再計算が動いて処理が遅くなるなど。最悪の場合、excel再起動になったり…。そんな不幸な事故が世の中から少しでも減ればと思い…

例えば「あ~このエクセルファイルってめっちゃ重いんだよなぁ。」ってやつは新インスタンスで開けばOK!

 

解決方法

excelを別のインスタンスで起動しましょう。まったく別のexcelとして起動するので背景に述べたようなexcelブック同士の干渉は発生しません。

ただし弊害もあります。例えばコピペ。同じインスタンスexcelならば、書式や数式などの貼り付けといったコピペの選択しも多いが、これらがない。テキスト貼り付けのみになってしまいます。

 

やり方

Googleで「excelインスタンス」で検索してみてください。わかりやすい説明がたくさんあります。

 

WBS

 

自作のWBS管理ツールを作ったきっかけ

タスク管理ってリーダーがどうしたいか?という趣味嗜好がとってもよく出てくる分野。Projectなどの管理ソフト使っている人もいれば、テキストベースでやっている人もいるし。

結局のことろ、どんなやり方をしてもちゃんと管理できればいいんだけども、誰もが効率的に管理できる仕組みということを突き詰めてくと、結局は市販のプロジェクト管理ツールのような見た目に収束していくと思う。左にWBS、右にガントチャートのやつ。

自分の現場は、例のごとく「勝手にインストール禁止」…。それに導入できても結構お値段高い…。

私が管理しているプロジェクトは大規模ではない・自分やメンバがコソコソ使えればよいい・高級な機能などは不要で~などなど、いろいろ考えた結果、エクセルを使ったWBS管理ツールを作ったほうが早いと考えたので、その備忘録として本記事をまとめます。

 

WBSを管理するって?

自分の仕事だけ見ればテキストだったり、ササっと作ったエクセル資料だったりお手軽に作った「タスクリスト」で十分管理は出来る。しかし、チームとしてのタスクを考えると「タスクA」はαさん実施してもらって、次に「タスクB」βさんかな? んで、このタスクはXX/XXまでに実施して…。という具合にタスク・人・期間の要素が複雑に絡んでくる。

WBSは成果物を作るためのタスク。それに人・期間などの要素が絡んできて、それらを全体的に管理することがWBSを管理することだと思う。

WBS管理のポイントは

失敗したプロジェクトの反省でよくWBSがちゃんとできていなかったってよく聞くけど、タスクを抜けもれなく「事前」に洗い出すなんてことは「正直不可能」で、ポイントは「不測の事態」や「横やり調査作業」や、「仕様変更」などなど…を都度調整できずにやることが雪だるま式に…ってことかと思う。最初から失敗しようとして失敗する人なんていないし、世のプロマネはみんな頑張ってるんだよホント。。

WBSの作り方

まずは骨組みを作らないと何も始まらない。骨組みは各現場や会社ごとに決まっている「一般的な開発フロー」に従ってWBSを作っていけばオッケー。アウトプットをベースにすることに注意が必要。その後は、実際に進めながら肉付け(微調整)していけばいいかな。大切なのはこの「微調整」作業をコツコツ実施することだと思う。正解なんてない。日々ベストな形に持っていくよう努力を継続することが大切。

 

エクセルはプロジェクト管理に使うな論争

心の叫び

よく聞きます。excel使うなんてナンセンス!わかってないなぁ的な…。

でもひとこと言わせてくれ

「Projectなどの管理ツールを使えるならそうしたいよ…ほんと」WEB系の管理ツールなんてリア充感満載、ピカピカしていてまぶしすぎるぜ…。使いてぇ。

もしあなたが「いろいろ使える・試せる」すばらしい現場に配属されているなら、ぜひ市販ソフトやWEB系の管理ツール使ってみてください。

だから結局、エクセルを使うんだ

ハエ退治するのに戦車?マシンガン?重火器不要、何なら素手でもいける?いや、お手軽なハエたたき(excel)で十分では? 自分がやりたいことにも柔軟に対応できるし。自分である程度excelをいじれる人は、この恩恵が最も大きいと思う。

とはいえ、最終的に「求める機能」や「プロジェクトの規模」によって、市販ソフト・excelを使い分けるのが正しい考え方だと思う。頭ごなしに「excelつかってるの?遅れてる~」とか言わないで。

エクセルを使うことによる弊害

そりゃぁたくさんありますよ。例えば、スケジュール変更にともなう後続タスクの日付変更。市販ソフトで先行関係をちゃんと引いていれば自動で変わるし、レポート出力機能なんてまぁ素晴らしい。そのまま印刷すればプロジェクトの状況が一目瞭然?

一方、excelの場合はプロジェクト管理するためにexcel自身と奮闘するなんてことが結構起こるわけです。そりゃそうですよね。だってそういう機能作ってないから。市販のプロジェクト管理ソフト…いいなぁ。かっこいいなぁ。すべて使いこなせる気はしないけど。

とはいえ最大の弊害は

クリティカルパス」を正確に把握できない。いいすぎた。できますよ、自分でちゃんとみれば。でも自動で、グラフィカルに見えてこない。クリティカルパスを管理できないWBS管理なんてけしからん!って声も聞こえてきますが、ここら辺はやっぱり専用ツールには勝てないですよ。なので予定線の変更時にはクリティカルパスが変わってないか意識する必要がある…。これも結局小・中規模案件だったら自分で把握できるレベルが大半だし、把握できなくなる量になってきたら市販ソフト使いましょうってことだと思う。

 

エクセルを使う弊害に対しての対応

さて、市販ソフトを羨ましがっても仕方ないので、excelで自作するわけだけども…

1.先行関係機能は不要

中小規模プロジェクト(チームメンバが10~20名)の管理において、タスク間の先行関係の矢印は邪魔だと思う。かつて、ぐちゃぐちゃのProject見たときには吐き気がした。線が重なりすぎて、1ピクセル単位のマウス操作技能が要求されるなんて思ってもみなかった。いやぁ肩凝ったよまったく。

 

話を戻すと、先行関係を表現したいなら「タスクの位置」で表現する。Aタスク→Bタスクだったとして、BタスクはAタスク直下に置いとけばいい。またはメモでも残しておけばよい。まぁこれも大規模プロジェクトになると通用しないので注意が必要だけれど、これでも十分なプロジェクトって結構多いのでは?

 どうしても先行関係をつけたかったら

タスクの開始日に先行関係タスク終了予定日の翌営業日日付の数式を入れておけばよい。 リッチな機能は不要。自分が必要な機能は自分で作れるのはexcelを使うメリットだ。

2.スケジュール変更時に手動で更新しなきゃ

 スケジュールの大規模変更って最初だけな気がする。一番最初に予定を立てる時に、あーでもない、こーでもないってスケジュール線をいじってみてみる感じ。先にも書いたが、先行関係は暫定的につけることはできるので、予定線自動変更機能は実現することは出来るのでそんなにデメリットにはならないと思う。

 3.人別の稼働予定や稼働状況が見えない

みれますよ。excelでも。ガントチャート部分に実績を入れてもらえれば日々の実績が集計できますし、予定工数だって計算すれば日別に計算することは可能。ここら辺も、自分がやりたいようにカスタマイズできるのがexcelの強み。

 4.クリティカルパスの把握

クリティカルパスを出来るだけ把握するために、WBSのタスク順序で工夫する必要がある。そしてガントチャート作成後は、これがクリティカルパスだよ!って自分で明記しておく必要がある。ツール化できない(やればできるけど)以上は、自分の頭で意識する必要がある。

 

私が作ったWBS管理ツール

イメージ

f:id:kokke33:20200629141300p:plain

WBSイメージ

 

特徴

 10~20名程度のプロジェクト管理に適した機能を実現。

  1. 世にいうベーシックなレイアウト (左がWBS、右がガントチャート
  2. 開始予定・終了予定を入力すればガントチャートは自動色付く(条件付書式)
  3. 各種タスクフィルタ機能(担当者ごと、直近ごと、期限切れ)
  4. 期限切れ、本日期限、開始遅延タスクを抽出してテキスト出力(メールに添付して全体周知するため)
  5. 各担当者の実績集計機能
  6. 各担当者の予定工数予測機能
  7. 有機能を利用して複数人で更新可能 
  8. イナズマ線はつけてません。ごちゃごちゃするので。
  9. 自動バックアップ機能
  10. などなど…

注意

私の現場ではメモリ4GBのボロPCで運用しているので問題ないと思いますが、少し重いと感じることもあるかも。そんな時は、excelは別のインスタンスで起動して使ってください。

kokke33.hatenablog.com

ダウンロード

バグなどもきっと残っているので公開は取りやめました。

それでも使ってみたいって人は連絡いただければ連携します。

github.com

 

クイックショートカット

 

出来ること

ショートカットを一発のコマンドで実行することが可能。大げさかもしれないが魔法のようなスピード感で作業ができるようになりました~。

 ※私のマシンはWindows10です。


例えば、以下の通り。CTL+ALT(+SHIFT※必要なら)+キー の組み合わせなので大量に設定可能。

  1. CTL+ALT+M ならいつも使う「メモ.txt」 を起動。
  2. CTL+ALT+Aなら「ショートカットまとめフォルダ」を起動など…

設定方法

以下のパスにクイック起動したい対象のショートカットをコピー

C:\Users\★自分のユーザ★\AppData\Roaming\Microsoft\Windows\Start Menu※(スタートメニュー)日本語の場合もあり

 ショートカットキーの設定方法

  1. 上記コピーしたショートカットを右クリック→プロパティ
  2. ショートカットキーを登録
    ※以下の例は「日時フォルダ」を開くショートカットキーの登録

f:id:kokke33:20200629112636p:plain

ショートカットキー登録

 

tiddlywiki5との出会い

 

背景

仕事するにあたって、実に様々な情報が氾濫している。この場合は「こっちをみて」、あの場合は「あっちをみて」、それでもなければ「こっちをみる」など。。

記憶力抜群なら一発で覚えられるかもしれないが、大体は「あれどこだったかな?たしか…」という感じで「調査」からスタートする。テキストメモだったり、リンク集をエクセルで作ったり。程度の差はあれこのメモを使っても「調査時間」必ず発生する。この「情報を探す」間に、本来やりたかったことを忘れたりなんてこともありイライラすることが多かった気がする・・・

この「調査」に多くの時間を割いていることに気づいてからは、「情報整理」の方法についていろいろ考えるようになった。大まかな情報整理の考え方は2種類あって、それぞれ実際に検討実施してみた結果は以下の通り。

 1.教科書のように情報を整理

これは真っ先に思いついたのでexcelをベースにした資料を作成。表紙を作って、トピックごとにシートを作っていく感じ。意外と手軽で情報整理には十分だと思ってたが、それは最初のうちだけ…。

しばらくたって情報量が肥大化していくにつれて、結局どこに何が書いてあるのかわからなくなり、結局キーワードを「ブック全体検索」する頻度が多くなった。また、新規トピックを記載しようと思い立っても、分類方法に迷うことになった。そんなこんなで、最終的には統率の取れていない資料に…。更新することも億劫になってしまった。

 2.情報を整理せずとにかく検索ヒットさせる

「1.」の失敗後、実施してみた方法。Googleのように全文検索エンジンを自PCに構築して探したい資料をヒットさせるイメージ。2010年ころの昔話になるが、「GoogleDesktop」はとても重宝していた。しかし、今はサポート終了してしまい断念。

それから時は流れて…Windows10。当時WinXPの検索機能から大幅に進化し結構使えるようになっているが、個人的にはしっくりこない。なんというかやっぱりGoogle検索のようなインターフェースをイメージしているからだろう。

 結局…

その後いろいろあって、今現在私が使っているは「探三郎」という全部検索ソフト。インストール不要なのでとても手軽なうえ、Google検索チックなインターフェースも満足。情報の最新化も定期的に実施も可能でフリーソフト。まさに完璧。このようにして私はろくに情報整理せず自分だけが満足した日々を過ごしていた。

 

WIKIベースの情報整理方法に転換

月日は経ち、チームリーダーという立場になってからはチームのために「情報整理」して「共有」するという点について、満足のいく仕組みを考える必要が出てきた。ポイントは「情報を共有する」「情報が最新化される」の2点。調べるとWIKIというシステムがまさにうってつけだという結論に至った。

 WIKIを使いたいよ、でも制約が…サーバを立てる?そんなこと出来ない…

現場PCに色々なツールを入れることすら敷居が高いのに、WIKI用のサーバを立てさせてくれなんて言えない…。まぁ利用人数も大規模だったらそうすべきだが、今は数名のチームメンバ間で十分。じゃぁどうればよいのか悩んだ末ににたどり着いたのが「TiddlyWiki」。

 その特徴は何といっても

たった1つのhtmlファイルがWIKIシステムそのもの。共有フォルダにポンと置けばすぐに使えるという手軽さよ。もうこれに限る。

最初は度肝を抜かれたこのTiddlyWikiI。TiddlyWiki自体は、Tidderと呼ばれる「記事」を無数にリンクさせて1つの情報体系を構築するという仕組み。内部的にはJavaScriptでゴリゴリと動的なページを作成しているイメージだ。一番したにソースリンクしているので本家のHPを実際に見てみるとよいと思う。その他「TiddlyWiki」でググれば日本語の紹介サイトも多数あるのでぜひ参考に。個人的にはこの自分でWikiを作る感じがとても楽しい。この「楽しみながら」情報整理できるという点もお気に入りのポイント。

 ただし致命的な欠点が①

「保存できない」。え?って感じ。じゃぁ使えないじゃん。なんでもブラウザ側のセキュリティ対策が進み、htmlファイルが自分自身を上書き保存できなくなってしまったらしい。TiddlyWikiのホームページには、回避策などもいくつか用意されているので自分にマッチした方法で使えればよい。

ちなみに私は拡張子を「hta」にするだけの方法。一番楽だ。ってか、htaアプリケーションとして動かせばよいってのは、これはこれでセキュリティ大丈夫なのか?って感じはするが…。htaアプリケーションについては調べてみるといろいろ興味深い仕組み。今時点ではかなり古い仕組みのようだけど、とっても便利な機能だと思う。

 ただし致命的な欠点が②

複数人で同時更新できない。そりゃぁ、そこまでするならサーバ立てるしかないでしょ~と思うし、自分の場合は小規模運用、NASなどの共有フォルダにポンとおいて使える手軽さのほうが重要。排他制御がないので、更新する際は「更新するよ~」って声かける原始的な方法で運用中(仮に同時更新した場合は「あと勝ち」)。

規模も大きくなり、同時に複数人が更新するようになってくるとサーバを立てないと排他制御・同時更新などの制御は出来ない。そうなってきたら素直にサーバを立てようと思う。

 

ソース

本家

 https://tiddlywiki.com/

kokke33's カスタマイズ版

 本家のTiddlyWikiを参考に自分が使いやすいようカスタマイズしたTiddlyWiki。3ペイン化や、Tidderのタブ化など(自分が)使いやすいように工夫した。

f:id:kokke33:20200628143932p:plain

kokke33's tiddlywiki

 ダウンロードはこちらから
github.com

日時フォルダを作成&開く

使い方

ソース中の「myMain = "C:\Users\XXX\Documents\00.日付" 」部分を修正後、「XXX.vbs」として保存。その後、ファイルをダブルクリック。
スタートアップなどに登録しておくと便利。
「クイックショートカット」に登録することで当日作業日付フォルダにワンタッチでアクセス可能になります。

作った背景

個人的に情報整理は「時系列」が一番しっくりくる。分類方法は、作業の種類、重要度など色々試してみたが、しばらくするとこの「分類」する作業が面倒になってきた。なかには適切に分類できない作業もでてたり、、、。

それならば、作業日付で分類してみようと思い立ち、当日作業で使った資料など、すべて作業日付フォルダ上で実施したところ凄く自分にマッチ。

日をまたいで作業するような資料は、前日フォルダからコピーして使う。こうすることでバックアップも時系列で取得できるし、検索もしやすいのでグッド。

ソース

'*****************************************
'*名称:日時フォルダを作成/開く
'*機能:当日日付フォルダがない場合は作成、ある場合は開く
'*引数:なし
'*返値:なし
'*****************************************
Option Explicit
'変数定義
Dim myMain,myDate,myMonth,myDay
Dim objFS, wh

'PATHを指定する
myMain = "C:\Users\XXX\Documents\00.日付" 
'日付を格納
myDate = Date
'フォルダ名として使用できるように、「YYYYMM」に変換
myMonth = Mid(myDate, 1, 4) & Mid(myDate, 6, 2)
myDay = Mid(myDate, 9, 2)

Set objFS = CreateObject("Scripting.FileSystemObject")
Set wh = CreateObject("Wscript.shell")

'月フォルダある?
If objFS.FolderExists(myMain & "\" & myMonth) Then
'日フォルダある?
If objFS.FolderExists(myMain & "\" & myMonth & "\" & myDay) Then
'日フォルダない時、作成
Else: objFS.CreateFolder (myMain & "\" & myMonth & "\" & myDay)
End If
Else
'月フォルダ作成後、日フォルダ作成
objFS.CreateFolder (myMain & "\" & myMonth)
objFS.CreateFolder (myMain & "\" & myMonth & "\" & myDay)
End If

'フォルダを開く
wh.run (myMain & "\" & myMonth & "\" & myDay)
WScript.sleep 100
'wh.SendKeys "%VEO", True

'オブジェクト閉じる
Set wh = Nothing
Set objFS = Nothing