0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Boxをファイル管理としてSkeに連携する

Last updated at Posted at 2025-08-29

Boxとは

「box(ボックス)」とは、ビジネス向けのクラウドコンテンツ管理プラットフォームの名称で、ファイルを安全に管理・共有できるクラウドストレージサービスです。容量無制限のストレージ機能に加え、アクセス権限の細やかな設定や、Microsoft Office、Slack、Zoomなど多数のビジネスアプリとの連携が可能で、セキュアなファイル管理とチームの共同作業をサポートします。

クラウド、高セキュリティ、容量無制限、使いしやすいなどの特徴により、ファイルサーバの代替として、複数拠点間の情報共有、業務効率化に役に立ちます。

Skeはローコードツールで添付ファイル管理機能はelFinderを利用していますが、ファイルの格納場所はWebサーバです。もしお客さんがすでにBoxを利用している場合、添付ファイルをクラウドからWebサーバに移してくれという依頼はなかなか口から出しにくいです。Boxをファイル管理としてelFinderを代替するカスタマイズ方法があればベストです。今回の記事はやり方を説明させていただきます。

Box側の準備

アカウントを申請する

無料で開発者アカウントを作成できます。ただしこのURLはBoxオフィシャル資料にはありません。AIにより昔提供された方式で推奨なやり方ではありません。
https://account.box.com/signup/developer
image.png

既存アカウントから開発機能をアクセスやり方もあります。ただし、種類により開発機能は利用できないことがあるので、気を付けてください。一応無料の「Individual」タイプはだめだとわかりました。
image.png

アプリを作る

開発者アカウント(またはレベル高い種類のアカウント)をログインしながら、以下のURLを新しいタブで開きます。https://app.box.com/developers/console
カスタムアプリを選択します。
image.png
アプリ名などを入力します。
image.png
サーバ認証を選らんでアプリを作成します。
image.png
構成タブに、クライアントシークレットを取得します。2要素認証必要で、ガイドに従って設定してください。
image.png
また、書き込み権限を設定してください。
image.png
Review&Submitボタンを押します。
image.png
確定します。
image.png
審査依頼中です。
、2つのステータスは緑になったら利用できます。
image.png
メールを確認して、リンクをクリックします。
image.png
承認します。
image.png
状態が緑になって利用可能です。
image.png

Rootフォルダを作る

新規フォルダを作成します。この場合、開発者アカウントではなく、業務上のフォルダのオーナーのアカウントで作成すべきです。
image.png
フォルダ名と共有ユーザを設定します。Boxのアプリのサービスアカウントを必ず追加してください。
image.png
サービスアカウントの取得場所は以下です。
image.png
作成できました。所有者と共有者を確認できます。
image.png

Ske側の準備

プロパティファイル設定

Skeのefw.propertiesに以下の情報を追加します。

efw.proerties
box.enterprise.id=[your enterprise id]
box.client.id=[your client id]
box.client.secret=[your client secret]
box.root.folder.id=[your folder id]

設定内容のコピー場所は以下です。
image.png

image.png

image.png

ボタン処理

サンプルとして、以下の処理をやります。
ユーザ一覧画面に処理ボタンを追加して、選択ユーザごとのBoxフォルダに遷移します。存在しない場合それを作成します。

追加ボタンの場所は以下です。
image.png
ボタン処理に以下プログラムを登録します。

function(touchConditionData){
    //選択されたユーザのIDを取得する
    if (touchConditionData.selectIds.length!=1){
        return new Result().alert("BOX管理したい対象は1件のみを選択してください。");
    }
    var selectId=JSON.parse(touchConditionData.selectIds[0])[0];
    //アクセストークンを取得する
    var accessToken = rest.post(
        "https://api.box.com/oauth2/token", 
        {
            client_id:properties.get("box.client.id"),
            client_secret:properties.get("box.client.secret"),
            grant_type:"client_credentials",
            box_subject_type:"enterprise",
            box_subject_id:properties.get("box.enterprise.id"),
        }
    ).access_token;
    //サブフォルダに該当ユーザのフォルダがあるかどうかチェックする
    //APIは一回取得できる件数制限があるからループで対応する
    var offset=0;
    var limit=1000;
    var folderId=null;
    do{
        var ret=rest.get(
            "https://api.box.com/2.0/folders/" + properties.get("box.root.folder.id")
            + "/items?offset=" + offset + "&limit="+limit,
            {
                authorization:"Bearer " + accessToken
            }
        );
        if (ret.entries.length==0){
            //もうサブフォルダが取れない場合、ループ処理終了
            break;
        }else{
            //選択されたユーザIDのフォルダがあるかどうかチェックする
            folderId = new Record(ret.entries)
                .seek("type","eq","folder")
                .seek("name","eq",selectId)
                .getValue("id");
            if (folderId!=null) {
                break;
            }else{
                offset+=limit;
            }
        }
    }while(true);
    //フォルダが存在しない場合新規作成する
    if (folderId==null){
        folderId=rest.post(
            "https://api.box.com/2.0/folders", 
            {
                name:selectId,
                parent:{
                    id:properties.get("box.root.folder.id"),
                },
            },
            {
                authorization:"Bearer " + accessToken,
                "content-type":"application/json",
            }
        ).id;
    }
    //確保できたフォルダをブラウザで開くようにする
    //もし未ログインの場合ログイン画面が表示される。ログイン後フォルダが開くようになる。
    var boxFolderShareLink = "https://app.box.com/folder/"+folderId;
    return new Result().eval("window.open('" + boxFolderShareLink + "');");

}

結果確認

ユーザ一覧から1行を選んでBOXボタンを押します。
image.png
ブラウザが開いて、選択したユーザIDのフォルダが作成されていることが確認できます。また、新規フォルダの権限は親フォルダと同じことを確認できます。
image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?