質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

Q&A

解決済

2回答

1389閲覧

Slackへ投稿するメッセージの整形

ku-man

総合スコア13

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Slack

Slackは、Tiny Speckという企業からリリースされたコミュニケーションツールです。GoogleDriveやGitHubなど、さまざまな外部サービスと連携することができます。

0グッド

0クリップ

投稿2018/11/27 07:15

PHPのプログラムから、APIを使用してSlackへメッセージを送るアプリケーションを作っています。
メッセージは以下のように、可変長の指標名と値が並ぶようなものになります。

11月26日(月)のデータ
来客数 15
売上 1500
客単価 100

このとき、出力を上記のようにフォーマットしたいのですが、おそらく以下の要因で、ズレてしまっています。

①半角スペースが、半角文字分の幅より狭く表示される
②半角大文字アルファベットが、他の半角文字の幅よりも広く表示される

PHP内部では以下のように文字列をフォーマットしており、ログにデバッグ出力したところ、期待通りにフォーマットされています。
(質問用に簡略化しています)

PHP

1$datas = [ 2 '来客数' => 15, 3 '売上' => 1500, 4 '客単価' => 100 5]; 6 7$message = '11月26日(月)のデータ'; 8 9$format = "%1$-30s%2$-d\r\n"; 10foreach ($datas as $key => $value) { 11 // 全角文字を2バイトと数える 12 $message .= sprintf($format, mb_convert_encoding($key, 'SJIS', 'UTF-8'), $value) 13} 14 15// フォーマット時にSJISになったメッセージ文字列を再度UTF-8に変換する 16$message = mb_convert_encoding($message, 'UTF-8', 'SJIS') 17 18/* 作成したメッセージ文字列を、Slack APIで投稿する(省略) */

調べたところ、Slackのフォントはブラウザのフォントに依存するようです。
解決策があるとすればフォントからのアプローチではなく、Slack側の機能でしょうか?

何かアイデアがあればご教授いただきたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

インラインコードは等幅のはずなのでうまくいくかと思います。
メッセージの書式設定

投稿2018/11/27 07:59

編集2018/11/27 07:59
dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ku-man

2018/11/27 08:25

ご回答ありがとうございます! メッセージ全体をインラインコードにしてみると、大文字アルファベットと半角スペースは解決しました。 しかし、今度は全角文字のが等幅になっておらず、ズレが生じてしまいました…
dice142

2018/11/27 08:29

それは単に空白の数があってないからとかでは? 全角文字は半角2個分だと思いますが、合ってますか?
ku-man

2018/11/27 09:17

実際にSlackに投稿されたメッセージで確認すると 分割あり 10人 分割なし 5人 のようなメッセージで数字の開始位置がズレていて、目視でも「り」と「し」の幅が微妙に異なって見えました。
ku-man

2018/11/27 09:18

空白の数は一致しています。
dice142

2018/11/27 09:22

インラインコードでずれるなら私ではこれ以上アドバイスできそうにないです。 フォントは基本的にクライアント側の設定になるので、外部からフォントの指定はできないと思います。。。 申し訳ありません。
ku-man

2018/11/27 10:00

ご丁寧にありがとうございました。 もう少し試行錯誤してみます!
guest

0

自己解決

いろいろと試したものの、結局ブラウザのフォントに左右されて、等幅のフォーマットはできないようなので、アタッチメントを使用することにしました。

投稿2018/11/30 08:34

ku-man

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問