MAGAZINE

ルーターマガジン

インフラ/運用

slackのファイル共有でソースコードがバイナリとして扱われる問題と対策

2025.01.24
Pocket

こんにちは、エンジニアの yamauchi です。
今回は、slackでファイル共有を行った際にバイナリファイルとして認識される問題と
その対処法について調査したので共有します。

slack上でrubyファイルがバイナリファイルとして扱われた

実行可能なrubyのファイル
sample1.rb と sample2.rb をファイル共有しようとするとバイナリになっていました。

使用したファイル

sample1.rb
変数をいくつか定義して”あ”と出力するソースコード

    a = 1
    b = 1
    c = 1
    puts "あ"

sample2.rb.rb
ActiveRecordを使用してmysqlに接続するソースコード

  require 'active_record'

  #DB接続設定
  ActiveRecord::Base.establish_connection(
    adapter:  "mysql2",
    host:     "localhost", #ローカルのDBに接続します。
    username: "root", #ユーザー名
    password: "",  #設定したMySQLのパスワード
    database: "training",  #接続したいDB名
  )

  class User < ActiveRecord::Base
  end

  puts User.find_by(name: &#039;john&#039;).name

バイナリファイルとして認識される

slackではファイル共有の方法として
・テキストスニペット
・ファイルをドラックアンドドロップ
の二種類がありますが、今回はどちらの方法でもバイナリと表示されました。
また、テキストスニペットを使用した際はファイルタイプとしてrubyを選択しています。

バイナリの画像1 バイナリの画像2 スニペット画面

バイナリにならないように試したこと

ドラックアンドドロップ

sample1.rb と sample2.rb について拡張子を消してドラックアンドドロップで確認すると
それぞれファイルタイプがFortranとC++になっていました。
どうやらslackの内部で自動でファイルタイプを推測しているようです。

ファイルタイプ

テキストスニペット

テキストスニペットのスニペットを作成する画面にて
ファイルのタイプをドラックアンドドロップで認識されたものに合わせてみました。
sample1.rb sample2.rbについて
それぞれFortranとC++にしたところバイナリとならずにアップロードできました。

スニペット画面 アップロード画面 スニペット画面 アップロード画面

テキストスニペットのタイトル

前述以外の方法でおそらく一番簡単にファイル共有する方法です。
テキストスニペットのタイトルに拡張子の付かない名前を入れ、タイプに種類を自動検出
を選択することでテキストとしてアップロードできました。

スニペット画面 アップロード画面

まとめ

  • slackの内部で自動でファイルタイプを推測する仕様がある

  • slack内部のファイルタイプと、テキストスニペットで選択したタイプ、またはドラックアンドドロップしたファイルの拡張子が異なる場合、バイナリとして認識されてしまう

  • バイナリを回避する方法はslack内部のファイルタイプに合わせるか、テキストとして共有する
Pocket

CONTACT

お問い合わせ・ご依頼はこちらから