misc.log

日常茶飯事とお仕事と

ファイル指定とフォルダ指定の指針

業務アプリだと、データファイルを読み込んでデータベースに記録したり、画面に表示しているデータをファイルとして保存したりというような処理がちょくちょく登場します。そのような処理の設計や実装方針で非常にぶれているような場面があったので、その際に行った行おうかと思ったけれどやめたアドバイスをちょっとまとめておきます。ほんと、初心者中の初心者向けの内容なのでベテラン勢は読む必要ありません。

ファイル指定ダイアログかフォルダ指定ダイアログのどちらを使うか

f:id:frontline:20190307122141p:plain
C# / SaveFileDialogの例

これは当然といえば当然なのですが、フォルダ指定ダイアログはフォルダを指定するだけなので、ファイル名などは指定できません。なので

  • ファイル名まで利用者が決める場合 …… ファイル指定のダイアログで、ドライブ、パス、ファイル名すべてを指定させる。
  • ファイル名が固定の場合 …… ログやエクスポートデータなどでファイル名が固定、または一定の書式に沿って自動命名される場合、フォルダ指定のダイアログでファイルの保存先を指定させるようにします。

このあたり、設計段階で「ファイル名は自由か、固定か」これを決めれば自然と方針が決まります。ぶれるところではないので注意してください。

フォルダ指定ダイアログを利用しなければならない場合

フォルダを指定するタイプのダイアログを使う場合、その用途は大きく2つに分けられます。

f:id:frontline:20190307121851p:plain
C# / FolderBrowserDialogの例

  • 1つ以上のファイルを保存する場所を指定させたい …… 1つ以上のファイル、それもファイル名はプログラム側が自動的に決めるようなものを保存する先を指定する場合に使います。
  • 2つ以上のフォルダやシステムの作業用フォルダなどを指定させたい …… システムがこの先ワークディレクトリとして使うような場所を指定する場合や、保存するデータが複数のフォルダ階層になった複雑なもので、その根元を指定したい場合に使います。

これを勘違いして、「指定したフォルダに、システム名をつけたフォルダを作ってファイルを1個保存する」なんて仕様を考える人がたまに居ますが、そのような場合はそもそも下記の点を見直してみてください。たとえばこんな感じ。「C:\指定されたフォルダ\MySystem001\」

  • そもそも、その「システム名のフォルダは必要か?」

1個のファイルを保存する先を指定するなら、極力、指定されたフォルダに直接ファイルを作るようにしましょう。わざわざ「システム名」とか「機能ID」のように、作り手の自己満足みたいなフォルダを作り、ユーザーが指定したフォルダから1段下層にファイルを作ることは混乱を招く以外何ももたらしません。なにより、システムIDやシステム名というものをユーザーが認識しているならいいのですが、昔ながらのシステムにありがちな「アルファベットと記号の羅列による本当のIDみたいなID」の場合、「何ですかこのフォルダ?」という質問につながる可能性もあります。

システム名や機能IDといったフォルダを作る必要があるのであれば、そのフォルダの場所をプログラムとして最初から固定にするか、最初に「そのプログラムのワークディレクトリ」として指定させたものを使い続ける、といったようにフォルダごと固定的な使い方にすべきです。ユーザーが指定するあちこちの場所にシステム名や機能名のサブフォルダが作られるのはあまり勧められる設計ではありません。

保存するという行為は、そのあと、「保存したものを閲覧する」という利用者の行動につながります。そのときの利便性も考えて命名や処理方針を考えてください。

システムを「外注」するときに読む本

システムを「外注」するときに読む本

システム設計のセオリー --ユーザー要求を正しく実装へつなぐ

システム設計のセオリー --ユーザー要求を正しく実装へつなぐ